80pts求调,玄关
查看原帖
80pts求调,玄关
1371439
xw_qwq楼主2025/8/1 11:39

rt,#2#8 WA

#include <bits/stdc++.h>
using namespace std;
struct node
{
	int a, b;
}c[1005];
int s[1000005] = {1}, len = 1;
int s1[1000005];
int ans[1000005], len2 = 0;
bool cmp(node a, node b)
{
	return a.a * a.b < b.a * b.b;
}
void mul(int x)
{
	int res = 0;
	for (int i = 0; i < len; i++)
		s[i] *= x;
	for (int i = 0; i < len; i++)
	{
		res += s[i];
		s[i] = res % 10;
		res /= 10;
	}
	while (res)
		s[len++] = res % 10, res /= 10;
//	for (int i = len - 1; i >= 0; i--)
//		cout << s[i];
//	cout << "\n";
}
void div(int x)
{
	int res = 0;
	for (int i = len - 1; i >= 0; i--)
		res = res * 10 + s[i], s1[i] = res / x, res = res % x;
}
void check()
{
	vector<int> tmp1, tmp2;
	bool flag = 0;
	for (int i = 0; i < len; i++)
	{
		if (s1[i])
			flag = 1;
		if (flag)
			tmp1.push_back(s1[i]);
	}
	flag = 0;
	for (int i = 0; i < len2; i++)
	{
		if (ans[i])
			flag = 1;
		if (flag)
			tmp2.push_back(ans[i]);
	}
	int l1 = tmp1.size(), l2 = tmp2.size();
	if (l1 < l2)
		return ;
	if (l1 > l2)
	{
		for (int i = len - 1; i >= 0; i--)
			ans[i] = s1[i];
		len2 = len;
		return ;
	}
	for (int i = l1 - 1; i >= 0; i--)
		if (tmp1[i] < tmp2[i])
			return ;
	for (int i = len - 1; i >= 0; i--)
		ans[i] = s1[i];
	len2 = len;
}
int main()
{
//	freopen("P1080_2.in", "r", stdin);
	int n;
	cin >> n;
	for (int i = 0; i <= n; i++)
		cin >> c[i].a >> c[i].b;
	sort(c + 1, c + 1 + n, cmp);
	for (int i = 0; i < n; i++)
	{
		mul(c[i].a);
		div(c[i + 1].b);
		check();
	}
	bool flag = 0, flag2 = 0;
	for (int i = len2 - 1; i >= 0; i--)
	{
		if (ans[i])
			flag = 1;
		if (flag)
		{
			cout << ans[i];
			flag2 = 1;
		}
	}
	if (!flag2)
		cout << 0;
	return 0;
}
2025/8/1 11:39
加载中...