• 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 }
  • 相关阅读:
    【Uva 10618】Tango Tango Insurrection
    Scripting web services
    防止SQL注入式攻击的笔记
    Net中的Request和Response对象的理解
    Net中的Request和Response对象的理解
    Net中的Request和Response对象的理解
    UEditor编辑器第一次赋值失败的解决方法
    我不问+你不说
    我不问+你不说
    我不问+你不说
  • 原文地址:https://www.cnblogs.com/greenofyu/p/14245625.html
Copyright © 2020-2023  润新知