国王游戏

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 const int maxn=100007;
 7 const int maxm=200007;
 8 int a[maxn],b[maxn];
 9 int ans[maxm*10];
10 int now,num,l=1;
11 void multi(int x){
12     for(int i=1;i<=l;i++) ans[i]*=a[x];//1~l 低位到高位 
13     for(int i=1;i<=l;i++){
14         ans[i+1]+=(ans[i]/10);
15         ans[i]%=10;
16     }
17     l++;
18     while(ans[l]>9)
19     {
20         ans[l+1]+=(ans[l]/10);
21         ans[l]%=10;
22         l++;
23     }//if(ans[l+1]>0) l++;这样是错的,因为ans[l]可能很大 
24 }
25 void divis(int x){
26     for(int i=l;i>=1;i--){
27         ans[i-1]+=((ans[i]%b[x])*10);
28         ans[i]/=b[x];
29     }
30     while(ans[l]==0) l--;
31     if(l==0) cout<<1<<endl;
32 }
33 int main(){
34     int n;cin>>n;
35     cin>>a[0]>>b[0];
36     for(int i=1;i<=n;i++){
37         cin>>a[i]>>b[i]; 
38     }
39     int aa=0,bb=0;
40     for(int i=1;i<=n;i++){
41         if(a[i]*b[i]>aa){
42             aa=a[i]*b[i];
43             bb=i;
44         }
45     }
46     l=1;
47     ans[1]=a[0];
48     for(int i=1;i<=n;i++)
49         if(i!=bb) multi(i);
50     divis(bb);
51     for(int i=l;i>=1;i--) cout<<ans[i];
52     cout<<endl;
53     return 0;
54 } 

猜你喜欢

转载自www.cnblogs.com/lcan/p/9495275.html