国王游戏 & 保护花朵

国王游戏:

 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 } 

 保护花朵:

国王游戏的题解不好好看,到这就想不到用结构体......

要开long long啊......

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm> 
 4 using namespace std;
 5 const int maxn=1e5+7;
 6 int n,tt;
 7 long long ans;
 8 struct Node{
 9     int t,d;
10     double a;
11 }node[maxn];
12 bool cmp(Node x,Node y){
13     return x.a<y.a;
14 }
15 int main(){
16     cin>>n;
17     for(int i=1;i<=n;i++){
18         cin>>node[i].t>>node[i].d;
19         node[i].t*=2;
20         node[i].a=(double)node[i].t/node[i].d;
21     }
22     sort(node+1,node+n+1,cmp);
23     for(int i=1;i<=n;i++){
24         ans+=tt*node[i].d;
25         tt+=node[i].t;
26     }
27     cout<<ans<<endl;
28     return 0;
29 }
原文地址:https://www.cnblogs.com/lcan/p/9495275.html