社区讨论
50 pts求调
P1080[NOIP 2012 提高组] 国王游戏参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mhj9el76
- 此快照首次捕获于
- 2025/11/03 22:52 4 个月前
- 此快照最后确认于
- 2025/11/03 22:52 4 个月前
记录
高精度炸了
CPP#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct node{
int l,r;
}a[1005];
int n,l,sum[1005],s=4,ans[1005],si=0,maxn[1005],siz=0;
bool cmp(node x,node y){
if(x.l*x.r==y.l*y.r)return x.r<y.r;
return x.l*x.r<y.l*y.r;
}
bool BIG(){
if(si!=siz)return si>siz;
for(int i=0;i<=si;i++){
if(ans[i]!=maxn[i])return ans[i]>maxn[i];
}
return 0;
}
void MAX(int *x){
if(BIG()){
while(ans[si]==0 && si!=0)si--;
siz=si;
for(int i=0;i<=si;i++){
maxn[i]=ans[i];
maxn[i]%=10000;
}
}
}
void CHU(int d){
while(sum[s]==0 && s!=0)s--;
int yu=0;
si=s;
for(int i=s;i>=0;i--){
yu=sum[i]+yu*10000;
ans[i]=yu/d;
yu%=10000;
}
}
void CHENG(int d){
for(int i=s;i>=0;i--)sum[i]*=d;
for(int i=s;i>=0;i--){
sum[i+1]+=sum[i]/10000;
sum[i]%=10000;
}
while(sum[s+1]!=0)s++;
}
int main() {
scanf("%d\n%d %d",&n,&l,&a[0].l);
for(int i=1;i<=n;i++)scanf("\n%d %d",&a[i].l,&a[i].r);
sort(a+1,a+n+1,cmp);
sum[0]=l;
s=0;
for(int i=1;i<=n;i++){
CHU(a[i].r);
//for(int i=s;i>=0;i--)cout<<ans[i];
//cout<<'\n';
MAX(ans);
CHENG(a[i].l);
}
for(int i=siz;i>=0;i--)cout<<maxn[i];
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...