Codeforces Round #693

A、长和宽一直除二到奇数就好了

 1 #include<iostream>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<cstdio>
 5 #include<queue>
 6 #include<vector>
 7 using namespace std;
 8  
 9 int main(void){
10     int t;
11     cin>>t;
12     while(t--){
13         int w,h,n;
14         cin>>w>>h>>n;
15         int cnt=1;
16         while(w%2==0){
17             cnt<<=1;
18             w/=2;
19         }
20         while(h%2==0){
21             cnt<<=1;
22             h/=2;
23         }
24         if(cnt>=n){
25             cout<<"YES"<<endl;
26         }else{
27             cout<<"NO"<<endl;
28         }
29     }
30     return 0;
31 }

B、先把2的分完,看剩不剩下2,如果有,看能不能用1抵掉2,然后把1分完

 1 #include<iostream>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<cstdio>
 5 #include<queue>
 6 #include<vector>
 7 using namespace std;
 8  
 9 int main(void){
10     int t;
11     cin>>t;
12     while(t--){
13         int n;
14         cin>>n;
15         int cnt=0;
16         for(int i=0;i<n;i++){
17             int q;
18             cin>>q;
19             cnt+=q;
20         }
21         if(cnt%2==0&&n%2==0){
22             cout<<"YES"<<endl;
23         }else{
24             cout<<"NO"<<endl;
25         }
26     }
27     return 0;
28 }

C、倒着来一遍,每次如果没跳出去就加上你将要去到的格子的分数

 1 #include<iostream>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<cstdio>
 5 #include<queue>
 6 #include<vector>
 7 using namespace std;
 8 typedef long long LL;
 9 const int N=2e5+10;
10 LL f[N];
11 int main(void){
12     int t;x`
13     cin>>t;
14     while(t--){
15         int n;
16         cin>>n;
17         for(int i=1;i<=n;i++){
18             cin>>f[i];
19         }
20         LL res=INT_MIN;
21         for(int i=n;i>=1;i--){
22             if(f[i]+i<=n){
23                 f[i]+=f[f[i]+i];
24             }
25             res=max(res,f[i]);
26         }
27         cout<<res<<endl;
28     }
29     return 0;
30 }

D、这个游戏就是要尽可能地自己多得分,让对手少得分,即让score_my - score_oth尽可能地大,所以每次拿最大的数就好了,因为如果你不拿,必然会被对手拿掉,

  如果这个是你的分,那你完全可以获得更多的分,如果这个是对手的分,那么你刚刚拿的肯定小于他将要拿的,所以score_my - score_oth减小了

  

 1 #include<iostream>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<cstdio>
 5 #include<queue>
 6 #include<vector>
 7 using namespace std;
 8 typedef long long LL;
 9 const int N=2e5+10;
10 int f[N];
11 bool cmp(int a,int b){
12     return a>b;
13 }
14 int main(void){
15     int t;
16     cin>>t;
17     while(t--){
18         int n;
19         cin>>n;
20         for(int i=1;i<=n;i++){
21             cin>>f[i];
22         }
23         sort(f+1,f+n+1,cmp);
24         LL suma=0,sumb=0;
25         for(int i=1;i<=n;i++){
26             if(i%2)
27             {
28                 if(f[i]%2==0)
29                     suma+=f[i];
30             }
31             else
32             {
33                 if(f[i]%2==1)
34                     sumb+=f[i];
35             }
36         }
37         if(suma>sumb){
38             cout<<"Alice"<<endl;
39         }else if(sumb>suma){
40             cout<<"Bob"<<endl;
41         }else{
42             cout<<"Tie"<<endl;
43         }
44     }
45     return 0;
46 }

E、先按照高和宽的最大值排序,然后为每一个人找一个答案(假设升序排的),那么对于i,他的答案只可能在1~i-1之间,所以维护高和宽的最小值就可以知道答案了。

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 struct node{
 5     int ma,mi;
 6     int idx;
 7     int ans;
 8 };
 9 bool cmp(node a,node b){
10     if(a.ma==b.ma)
11         return a.mi>b.mi;
12     return a.ma<b.ma;
13 }
14 bool cmpp(node a,node b){
15     return a.idx<b.idx;
16 }
17 const int N=2e5+10;
18 node a[N];
19 int main(void){
20     int t;
21     cin>>t;
22     while(t--){
23         int n;
24         cin>>n;
25         for(int i=1;i<=n;i++){
26             cin>>a[i].ma>>a[i].mi;
27             if(a[i].ma<a[i].mi){
28                 swap(a[i].ma,a[i].mi);
29             }
30             a[i].idx=i;
31         }
32         sort(a+1,a+1+n,cmp);
33         int flag=-1;
34         for(int i=1;i<=n;i++){
35             if(flag==-1){
36                 a[i].ans=-1;
37             }else{
38                 if(a[i].mi>a[flag].mi){
39                     a[i].ans=a[flag].idx;
40                 }else{
41                     a[i].ans=-1;
42                 }
43             }
44             if((flag==-1&&a[i].ma!=a[i+1].ma)||(flag!=-1&&a[i].mi<a[flag].mi)){
45                 flag=i;
46             }
47         }
48         sort(a+1,a+1+n,cmpp);
49         for(int i=1;i<=n;i++){
50             cout<<a[i].ans<<" ";
51         }
52         cout<<endl;
53     }
54     return 0;
55 }
原文地址:https://www.cnblogs.com/greenofyu/p/14245625.html