• Codeforces Round #401 (Div. 2)A B C


    题目连接:

    http://codeforces.com/contest/777

    A. Shell Game

    题意

    题解:

    6是循环节,判一下奇偶

    代码

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 #define mem(a) memset(a,0,sizeof(a))
     5 #define mp(x,y) make_pair(x,y)
     6 const int INF = 0x3f3f3f3f;
     7 const ll INFLL = 0x3f3f3f3f3f3f3f3fLL;
     8 inline ll read(){
     9     ll x=0,f=1;char ch=getchar();
    10     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    11     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    12     return x*f;
    13 }
    14 //////////////////////////////////////////////////////////////////////////
    15 const int maxn = 1e5+10;
    16 
    17 int main(){
    18     int a[3];
    19     int n = read(),x=read();
    20     mem(a);
    21     a[x] = 1;
    22 
    23     n%=6;
    24     if(n==0){
    25         cout << x;
    26         return 0;
    27     }
    28     if(n%2){
    29         for(int i=1; i<=n; i++){
    30             if(i%2){
    31                 swap(a[0],a[1]);
    32             }else{
    33                 swap(a[1],a[2]);
    34             }
    35         }
    36     }else{
    37         for(int i=1; i<=n; i++){
    38             if(i%2){
    39                 swap(a[1],a[2]);
    40             }else{
    41                 swap(a[0],a[1]);
    42             }
    43             // cout << a[0] << " " << a[1] << " " << a[2] << endl;
    44         }
    45     }
    46     for(int i=0; i<3; i++){
    47         if(a[i]){
    48             cout << i << endl;
    49             break;
    50         }
    51     }
    52 
    53     return 0;
    54 }

    B. Game of Credit Cards

    题意

    n代表信用卡号的长度,两个人,第一个串顺序不能变,第二个串顺序可以任意变,每一位比,谁大谁就赢一次,问 第二个人输的最少 和 赢的最多 的次数

    题解:

    贪心,
    第一个ans:用第二个人最大的数和第一个人比这个数小1的数比,求出赢得和平手的次数res,ans=n-res
    第二个ans:也是一样,只是不用求平手的次数了

    贪心 真恶心啊

    代码一

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 #define mem(a) memset(a,0,sizeof(a))
     5 #define mp(x,y) make_pair(x,y)
     6 const int INF = 0x3f3f3f3f;
     7 const ll INFLL = 0x3f3f3f3f3f3f3f3fLL;
     8 inline ll read(){
     9     ll x=0,f=1;char ch=getchar();
    10     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    11     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    12     return x*f;
    13 }
    14 //////////////////////////////////////////////////////////////////////////
    15 const int maxn = 1e3+10;
    16 
    17 string s1,s2;
    18 int a[maxn],b[maxn];
    19 
    20 int main(){
    21     int n = read();
    22     int res=0;
    23     cin >> s1 >> s2;
    24     for(int i=0; i<n; i++){
    25         a[s1[i]-'0']++;
    26     }
    27     for(int i=0; i<n; i++){
    28         b[s2[i]-'0']++;
    29     }
    30     for(int i=9; i>=0; i--){
    31         int t = min(a[i],b[i]);
    32         res += t;
    33         a[i] -= t, b[i] -= t;
    34     }
    35 
    36     for(int i=9; i>=0; i--)
    37         for(int j=i-1; j>=0; j--){
    38             if(b[i] && a[j]) {
    39                 res++;
    40                 a[j]--; b[i]--;
    41                 if(b[i]) i++;
    42                 break;
    43             }
    44         }
    45     cout << n-res << endl;
    46 
    47     mem(a);
    48     mem(b);
    49     for(int i=0; i<n; i++){
    50         a[s1[i]-'0']++;
    51     }
    52     for(int i=0; i<n; i++){
    53         b[s2[i]-'0']++;
    54     }
    55 
    56     res = 0;
    57     for(int i=9; i>=0; i--)
    58         for(int j=i-1; j>=0; j--){
    59             if(b[i] && a[j]) {
    60                 res++;
    61                 b[i]--; a[j]--;
    62                 if(b[i]) i++;
    63                 break;
    64             }
    65         }
    66 
    67     cout << res << endl;
    68 
    69 
    70 
    71     return 0;
    72 }

    代码二

    pb写的

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 #define mem(a) memset(a,0,sizeof(a))
     5 #define mp(x,y) make_pair(x,y)
     6 const int INF = 0x3f3f3f3f;
     7 const ll INFLL = 0x3f3f3f3f3f3f3f3fLL;
     8 inline ll read(){
     9     ll x=0,f=1;char ch=getchar();
    10     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    11     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    12     return x*f;
    13 }
    14 //////////////////////////////////////////////////////////////////////////
    15 const int maxn = 1e3+10;
    16 
    17 int n,a[20],b[20],ans;
    18 char s[1010],s2[1010],s1[1010];
    19 int main(){
    20     scanf("%d%s%s",&n,s,s2);
    21     for(int i=0;i<n;i++)b[s2[i]-'0']++;
    22     memcpy(a,b,sizeof(b));
    23     for(int i=0;i<n;i++){
    24         for(int j=s[i]-'0';j<10;j++)
    25             if(b[j]){b[j]--,s1[i]='0'+j;break;}
    26         if(!s1[i])
    27             for(int j=0;j<10;j++)
    28                 if(b[j]){b[j]--,s1[i]='0'+j;break;}
    29     }
    30     for(int i=0;i<n;i++)
    31         if(s[i]>s1[i])ans++;
    32     printf("%d
    ",ans);
    33     memset(s1,0,sizeof(s1));
    34     for(int i=0;i<n;i++){
    35         for(int j=s[i]-'0'+1;j<10;j++)
    36             if(a[j]){a[j]--,s1[i]='0'+j;break;}
    37         if(!s1[i])
    38             for(int j=0;j<10;j++)
    39                 if(a[j]){b[j]--,s1[i]='0'+j;break;}
    40     }
    41     ans=0;
    42     for(int i=0;i<n;i++)
    43         if(s1[i]>s[i])ans++;
    44     printf("%d",ans);
    45     return 0;
    46 }

    C. Alyona and Spreadsheet

    题意:

    n*m的矩阵,q次询问 le, ri
    问是否存在一列 从le到ri 都是非递减的序列

    题解:

    1 ≤ n·m ≤ 100 000 所以数组开不下,用vector, 输入完m 再resize
    dp[i][j]表示第i行第j列向上延伸最多是多少
    转移:dp[i][j] += ((a[i][j]>=a[i-1][j]) ? dp[i-1][j] : 0);
    然后维护len[i] 表示 第i行的所有列的最大值。
    询问的时候 判断一下 len[ri] >= ri-le+1

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 #define mem(a) memset(a,0,sizeof(a))
     5 #define mp(x,y) make_pair(x,y)
     6 const int INF = 0x3f3f3f3f;
     7 const ll INFLL = 0x3f3f3f3f3f3f3f3fLL;
     8 inline ll read(){
     9     ll x=0,f=1;char ch=getchar();
    10     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    11     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    12     return x*f;
    13 }
    14 //////////////////////////////////////////////////////////////////////////
    15 const int maxn = 1e5+10;
    16 
    17 vector<int> a[maxn],dp[maxn];
    18 int len[maxn];
    19 
    20 int main(){
    21     int n,m; cin>>n>>m;
    22     for(int i=1; i<=n; i++){
    23         a[i].resize(m+1);
    24         // dp[i].resize(m+1);
    25         for(int j=1; j<=m; j++){
    26             cin >> a[i][j];
    27             // dp[i][j] = 1;
    28         }
    29     }
    30     for(int i=1; i<=n; i++){
    31         dp[i].resize(m+1,1); // 初始化为1 新姿势
    32         int mx = -1;
    33         for(int j=1; j<=m; j++){
    34             if(i>1){
    35                 dp[i][j] += ((a[i][j]>=a[i-1][j]) ? dp[i-1][j] : 0);
    36             }
    37             mx = max(mx,dp[i][j]);
    38         }
    39         len[i] = mx;
    40     }
    41 
    42     // for(int i=1; i<=n; i++){
    43     //  for(int j=1; j<=m; j++)
    44     //      cout << dp[i][j] << " ";
    45     //  cout << endl;
    46     // }
    47     int q; cin>>q;
    48     for(int i=1; i<=q; i++){
    49         int le=read(),ri=read();
    50         if(len[ri] >= ri-le+1)
    51             puts("Yes");
    52         else
    53             puts("No");
    54     }
    55 
    56 
    57     return 0;
    58 }
  • 相关阅读:
    建造者模式5(7)
    抽象工厂模式4(6)
    工厂方法模式3(5)
    jxl导出excel(2)
    jxl导入excel(1)
    java8新特性字符串转LocalDateTime转Date(6)
    极光推送java服务端-通知(2)
    极光推送java服务端-通知(1)
    SpringCloud微服务之Ribbon负载均衡(一)
    cenos7搭建gitlab
  • 原文地址:https://www.cnblogs.com/yxg123123/p/6827694.html
Copyright © 2020-2023  润新知