zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    HDU 5938 Four Operations 【贪心】(2016年中国大学生程序设计竞赛(杭州))
    HDU 5935 Car 【模拟】 (2016年中国大学生程序设计竞赛(杭州))
    HDU 5934 Bomb 【图论缩点】(2016年中国大学生程序设计竞赛(杭州))
    HDU 5933 ArcSoft's Office Rearrangement 【模拟】(2016年中国大学生程序设计竞赛(杭州))
    HDU 5929 Basic Data Structure 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)
    【转】LaTeX 符号命令大全
    HDU 5922 Minimum’s Revenge 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)
    HDU 5927 Auxiliary Set 【DFS+树】(2016CCPC东北地区大学生程序设计竞赛)
    数据结构之稀疏矩阵
    C++中引用(&)的用法和应用实例
  • 原文地址:https://www.cnblogs.com/luoyugongxi/p/12263079.html
Copyright © 2011-2022 走看看