社区讨论
求人如救火 80分 九、十两个点RE
P1080[NOIP 2012 提高组] 国王游戏参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mi6tqlx6
- 此快照首次捕获于
- 2025/11/20 10:40 4 个月前
- 此快照最后确认于
- 2025/11/20 10:40 4 个月前
CPP
#include<bits/stdc++.h>
#define FOR(i,x,y) for(int i=(x);i<=(y);i++)
#define DOR(i,x,y) for(int i=(x);i>=(y);i--)
using namespace std;
struct node{
int a,b,c;
};
node f[1005];
char sum[1005][10005];
char ans[10005]={"0"};
char t[10005];
bool cmp(node a,node b){
return a.c<b.c;
}
string gjchen(char a[],int b){
int a1[10005],x=0,c[10005],l=strlen(a);
FOR(i,1,l){
a1[i]=a[l-i]-48;
}
FOR(i,1,l){
c[i]=a1[i]*b+x;
x=c[i]/10;
c[i]%=10;
}
while(x>0) {
c[++l]=x%10;
x/=10;
}
string s="";
DOR(i,l,1){
string t="a";
t[0]=c[i]+48;
s=s+t;
}
return s;
}
string gjchu(char a[],int b){
int l=strlen(a),x=0,a1[10005],c[10005];
FOR(i,1,l){
a1[i]=a[i-1]-48;
}
FOR(i,1,l){
c[i]=(x*10+a1[i])/b;
x=(x*10+a1[i])%b;
}
int lc=1;
while(lc<l&&c[lc]==0) lc++;
string s="";
for(int i=lc;i<=l;i++){
string t="a";
t[0]=c[i]+48;
s=s+t;
}
return s;
}
bool bijiao(char a[],char b[]){
int l1=strlen(a),l2=strlen(b);
if(l1<l2)return true;
else if(l1>l2) return false;
else if(strcmp(a,b)<0) return true;
else return false;
}
int main(){
int n;
scanf("%d",&n);
scanf("%d%d",&f[0].a,&f[0].b);
FOR(i,1,n){
scanf("%d%d",&f[i].a,&f[i].b);
f[i].c=f[i].a*f[i].b;
}
sort(f+1,f+1+n,cmp);
sprintf(sum[0],"%d",f[0].a);
FOR(i,1,n-1){
strcpy(sum[i],gjchen(sum[i-1],f[i].a).c_str());
}
FOR(i,1,n){
strcpy(t,gjchu(sum[i-1],f[i].b).c_str());
if(bijiao(ans,t)) strcpy(ans,gjchu(sum[i-1],f[i].b).c_str());
}
printf("%s",ans);
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...