社区讨论

60pts,未过求调

P1094[NOIP 2007 普及组] 纪念品分组参与者 2已保存回复 6

讨论操作

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

当前回复
5 条
当前快照
1 份
快照标识符
@mkb1ydw0
此快照首次捕获于
2026/01/12 19:01
2 个月前
此快照最后确认于
2026/01/12 19:29
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。


用__int128:

CPP
#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用法出错了吧)

回复

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

正在加载回复...