社区讨论

求人如救火 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 条回复,欢迎继续交流。

正在加载回复...