• Codeforces Round #617 (Div. 3)


    A

    题意:能否将数组里面的值用数组里面的值替换出一个和为奇数的数组

    思路:1.和为奇数yes 2.和为偶数但有奇数yes 3.个数是奇数的,有奇数的yes 其他都是no

    果然罚时全给了A

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long
     4 #define il inline
     5 #define it register int
     6 #define lowbit(x) (x)&(-x)
     7 #define mem(a,b) memset(a,b,sizeof(a))
     8 #define mod 1000000007
     9 const int maxn=1e5+10;
    10 int a,n,sum;
    11 int main(){
    12     int t;
    13     scanf("%d",&t);
    14     while(t--){
    15         scanf("%d",&n);
    16         sum=0;
    17         int f=0,f2=0;
    18         for(it i=0;i<n;i++){
    19             scanf("%d",&a);
    20             sum+=a;if(a&1){f=1;}
    21             if(a%2==0){f2=1;}
    22         }
    23         if(sum&1 || (f==1 && n&1) || (sum%2==0 &&f==1 && f2==1)){
    24             printf("YES
    ");
    25         }
    26         else{
    27             printf("NO
    ");
    28         }
    29     }
    30     return 0;
    31 }
    View Code

    B

    题意:每花十元,可以得一元,问最多能花多少

    思路:9的倍数特判(n-1)/9+n,其他 n/9+n就是答案

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long
     4 #define il inline
     5 #define it register int
     6 #define lowbit(x) (x)&(-x)
     7 #define mem(a,b) memset(a,b,sizeof(a))
     8 #define mod 1000000007
     9 const int maxn=1e5+10;
    10 int a,n,sum;
    11 int main(){
    12     int t;
    13     scanf("%d",&t);
    14     while(t--){
    15           scanf("%d",&n);
    16           if(n%9==0){
    17                 printf("%d
    ",n+(n-1)/9);continue;
    18           }
    19           printf("%d
    ",n+n/9);
    20     }
    21     return 0;
    22 }
    View Code

    C

    题意:如果有走过重复点,算出最小的步数的l和r值

    思路:用map存点,模拟就行

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long
     4 #define il inline
     5 #define it register int
     6 #define lowbit(x) (x)&(-x)
     7 #define mem(a,b) memset(a,b,sizeof(a))
     8 #define mod 1000000007
     9 const int maxn=2e5+10;
    10 int n,t;
    11 struct node{
    12     int x,y;
    13     friend bool operator<(const node a,const node b){
    14             if(a.x==b.x){
    15                       return a.y<b.y;
    16             }
    17             return a.x<b.x;
    18     }
    19     node(){}
    20     node(int xx,int yy):x(xx),y(yy){}
    21 };
    22 char s[maxn];
    23 map<node,int>mp;
    24 int main(){
    25     scanf("%d",&t);
    26     while(t--){
    27         scanf("%d",&n);
    28         scanf("%s",s+1);mp.clear();
    29         int x=0,y=0;
    30         mp[node(0,0)]=1000000;
    31         int f=1,l,r,minb=maxn;
    32         for(it i=1;i<=n;i++){
    33             if(s[i]=='L'){
    34                 x--;
    35             }
    36             else if(s[i]=='R'){
    37                 x++;
    38             }
    39             else if(s[i]=='U'){
    40                 y++;
    41             }
    42             else if(s[i]=='D'){
    43                 y--;
    44                 
    45             }
    46             if(mp[node(x,y)]==1000000){
    47                 int kkk=i-1;
    48                 if(kkk<minb){l=1;r=i;minb=kkk;}f=0;mp[node(x,y)]=i;
    49             }
    50             else if(mp[node(x,y)]){
    51                 int kkk=i-mp[node(x,y)];
    52                 if(kkk<minb){l=i-kkk+1;r=i;minb=kkk;}f=0;mp[node(x,y)]=i;
    53                 }
    54             else{
    55                 mp[node(x,y)]=i;
    56             }
    57             //cout<<x<<y<<i<<endl;
    58         }
    59         if(f){
    60             printf("-1
    ");
    61         }
    62         else{
    63             printf("%d %d
    ",l,r);
    64         }
    65     }
    66     return 0;
    67 }
    View Code

    D

    居然比c题开的快,因为c题题目读了半天,读不懂直接跳了

    题意:a和b的攻击力,有n个h1~hn的血条怪,有k个使得b跳过技能的招数,问a有多少次可以杀死怪的最后一血

    思路:h1~hn都余上(a+b)==sheng,sheng<=a,总值加一,sheng>a的部分求出需要的k==(sheng-1)/a,存下来排序求最大总值

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long
     4 #define il inline
     5 #define it register int
     6 #define lowbit(x) (x)&(-x)
     7 #define mem(a,b) memset(a,b,sizeof(a))
     8 #define mod 1000000007
     9 const int maxn=2e5+10;
    10 int n,a,b,k,h,s[maxn];
    11 int main(){
    12     scanf("%d%d%d%d",&n,&a,&b,&k);
    13     //int kk=__gcd(a,b);
    14     int c=a+b;
    15     int sum=0,t=0;
    16     for(int i=0;i<n;i++){
    17         scanf("%d",&h);
    18         int sheng=h%c;
    19         if(sheng==0){sheng=c;}
    20         //cout<<sheng<<endl;
    21         if(sheng<=a){
    22               sum++;
    23         }
    24         else{
    25         s[t++]=(sheng-1)/a;
    26         }
    27     }
    28     sort(s,s+t);
    29     for(it i=0;i<t;i++){
    30         if(k>=s[i]){
    31                   sum++;k-=s[i];
    32         }
    33         else{break;}
    34     }
    35     printf("%d
    ",sum);
    36     return 0;
    37 }
    View Code

    E1

    我吐血了,死因s[i]>=s[j],多了等号,因为c题搞了半天,当时c题的读题和一直判不好(0,0)点导致时间没有,一看E1这么简单,暴力来,然后wa到比赛结束

    然后看了数据,彻夜难眠……因为是暴力,所以代码就不放出来了,等补完了E2,直接放E2的代码。

    upd:原来E2是多个颜色,数据扩大,那就还是贴一下E1的暴力代码了

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long
     4 #define il inline
     5 #define it register int
     6 #define lowbit(x) (x)&(-x)
     7 #define mem(a,b) memset(a,b,sizeof(a))
     8 #define mod 1000000007
     9 const int maxn=2e5+10;
    10 int n,a[500]={0};
    11 char s[500];
    12 int main(){
    13     scanf("%d",&n);
    14     scanf("%s",s);
    15     a[0]=0;
    16     int ff=1;
    17     for(it i=1;i<n;i++){
    18         for (int j=0;j<i; j++) {
    19             if (s[j]>s[i]) {
    20                 a[i]= 1;
    21             }
    22         }
    23         for (int k=i+1;k<n; k++) {
    24             if (s[i]>s[k] && a[i]==1) {
    25                 ff = 0;
    26                 break;
    27             }
    28         }
    29         if(!ff){
    30             break;
    31         }
    32  
    33     }
    34     if(ff){
    35         printf("YES
    ");
    36         for(it i=0;i<n;i++){
    37             printf(i==n-1?"%d
    ":"%d",a[i]);
    38         }
    39     }
    40     else{
    41             printf("NO
    ");
    42     }
    43     return 0;
    44 }
    View Code

    不知道为什么……现在打比赛开局总会爆炸

  • 相关阅读:
    贪心法之最优装载问题
    判断回文
    P1217 [USACO1.5]回文质数 Prime Palindromes
    李白打酒
    P1036 选数
    P1028 数的计算
    P1316 丢瓶盖
    P1181 数列分段Section I
    P1182 数列分段`Section II`
    P1216 [IOI1994][USACO1.5]数字三角形 Number Triangles
  • 原文地址:https://www.cnblogs.com/luoyugongxi/p/12263079.html
Copyright © 2020-2023  润新知