救命!90分,为什么第10个wa了?
查看原帖
救命!90分,为什么第10个wa了?
1147989
goldenhour楼主2025/1/28 10:23
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e4 + 7;

int ans[10005];
int s[10005] = { 1 };
int slen = 1;//数组s的长度
int n;

struct pe {
	int a, b;
}p[N];

bool cmp(pe p1, pe p2);
void mul(int x);
void div(int x);

int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);

	cin >> n;
	for (int i = 0; i <= n; i++)
	{
		cin >> p[i].a >> p[i].b;
	}
	//排序
	sort(p + 1, p + 1 + n, cmp);

	for (int i = 0; i < n; i++)
	{
		mul(p[i].a);
	}
	div(p[n].b);
	for (int i = slen; i >= 0; i--)
	{
		cout << ans[i];
	}
	cout << "\n";
	return 0;
}

bool cmp(pe p1, pe p2)
{
	return p1.a * p1.b < p2.a * p2.b;
}

void mul(int x)
{
	//高精度*低精度x
	for (int i = 0; i < slen; i++)
	{
		s[i] *= x;
	}
	//进位,注意这里是倒着存的,s[0]为最低位
	for (int i = 0; i < slen; i++)
	{
		s[i + 1] += s[i] / 10;
		s[i] = s[i] % 10;
	}
	while (s[slen] != 0)
	{
		s[slen + 1] += s[slen] / 10;
		s[slen] = s[slen] % 10;
		slen++;
	}
}

void div(int x)
{
	int tem = 0;
	//从高位开始
	for (int i = slen - 1; i >= 0; i--)
	{
		ans[i] = s[i] / x;
		tem = s[i] % x;//余数
		if(i>0) s[i - 1] += tem * 10;
	}
	//去掉前导0
	slen--;
	while (ans[slen] == 0 && slen > 0) {
		slen--;
	}
}
 cpp```
真不知道为什么
2025/1/28 10:23
加载中...