社区讨论

60PTS, WA #5#7#8#9, 求调玄关

P1080[NOIP 2012 提高组] 国王游戏参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mkb30dg6
此快照首次捕获于
2026/01/12 19:30
2 个月前
此快照最后确认于
2026/01/12 19:41
2 个月前
查看原帖

所以一定要高精度吗

用unsigned long long:

CPP
#include<bits/stdc++.h>
using namespace std;
const int maxN=1e3+5;
struct node{
	unsigned long long a,b;
}num[maxN];
bool cmp(node x,node y) {return x.a*x.b<y.a*y.b;}
int n;
unsigned long long ans;
int main()
{
	cin>>n;
	cin>>num[0].a>>num[0].b;
	for(int i=1;i<=n;i++) cin>>num[i].a>>num[i].b;
	sort(num+1,num+n+1,cmp);
	unsigned long long x=num[0].a;
	for(int i=1;i<=n;i++)
	{
		ans=max(x/num[i].b,ans);
		x*=num[i].a;
	}
	cout<<ans;
}

60 PTS。


CPP
用__int128:
#include<bits/stdc++.h>
using namespace std;
const int maxN=1e3+5;
void print(__int128 x)
{
    if(x>9)
	{
        print(x/10);
    }
    putchar(x%10+'0');
}
struct node{
	int a,b;
}num[maxN];
bool cmp(node x,node y) {return x.a*x.b<y.a*y.b;}
int n;
__int128 ans;
int main()
{
	cin>>n;
	cin>>num[0].a>>num[0].b;
	for(int i=1;i<=n;i++) cin>>num[i].a>>num[i].b;
	sort(num+1,num+n+1,cmp);
	__int128 x=num[0].a;
	for(int i=1;i<=n;i++)
	{
		ans=max(x/num[i].b,ans);
		x*=num[i].a;
	}
	print(ans);
}

60 PTS。(不会是__int128写法出错了吧)

回复

3 条回复,欢迎继续交流。

正在加载回复...