• Codeforces Round #616 (Div. 2) 题解


    A. Even But Not Even

    题意:

    定义一个数所有位置的和为偶数它本身不为偶数的数为ebne,现在给你一个数字字符串,你可以删除任意位置上的数字使其变为ebne输出任意改变后的结果,如果不能则输出-1

    思路:

    比赛的时候分类讨论过的。。。真是愚蠢至极妈的

    其实只要看字符串中奇数的个数就好了,如果小于两个则肯定不行,如果大于两个则直接按相对位置输出任意两个就好了

    #include<iostream>
    #include<algorithm>
    #include<string>
     using namespace std;
     int main()
     {
         int t,n;
         scanf("%d",&t);
         while(t--){
             string a,b;
             cin>>n>>a;
             for(int i=0;i<n;i++){
                 if((a[i]-'0')%2)
                     b+=a[i];
             }
            if(b.length()<2)    cout<<"-1"<<endl;
            else    cout<<b.substr(0,2)<<endl;
         }
        return 0;
      } 

    B. Array Sharpening

    题意:

    给你一个数组,你可以对任意位置上的元素进行任意次的减1操作(不能使元素小于0),使得该数组变成一个先严格递增再严格递减的数组(也可以只升不降,只降不升)

    思路:

    我们考虑将每个元素都作为转折点尝试,如果a[i]<min(i,n-i-1)的话该序列一定不行,最后还需特判一下n为偶数n/2-1与n/2是否相同

    #include<iostream>
    #include<algorithm>
     using namespace std;
     const int maxn=3e5+10;
     int a[maxn];
     int main()
     {
         int t,n;
         scanf("%d",&t);
         while(t--){
             scanf("%d",&n);
             int flag=0;
             for(int i=0;i<n;i++){
                 scanf("%d",&a[i]);
                 if(a[i]<min(i,n-1-i)) flag=1;
             }
            if(n%2==0)    if(a[n/2-1]==n/2-1&&a[n/2]==a[n/2-1]) flag=1;
            if(flag)    cout<<"No"<<endl;
            else    cout<<"Yes"<<endl;     
         }
        return 0;
     }

     C. Mind Control

    题意:

    n个元素,n个人轮流取数,可以取数组头或尾元素,你在第m轮取,并且你可以控制k个人取什么元素,问你能取得最大元素是多少(前面的人不一定都取最大的)

    思路:

    枚举一下现在强制多少人站队听他的,遍历剩下不听他的人的人数,然后把从后往前和从前往后的最大值的最小值的最大值算出来就可以了

    #include<iostream>
    #include<algorithm>
    #define inf 0x3f3f3f3f
     using namespace std;
     const int maxn=3510;
     int a[maxn],t,n,m,k;
     int main()
     {
         scanf("%d",&t);
         while(t--){
             scanf("%d%d%d",&n,&m,&k);
             for(int i=0;i<n;i++)    scanf("%d",&a[i]);
             k=min(m-1,k);
             int ans=-inf;
             for(int i=0;i<=k;i++){
                 int x=inf;
                 for(int j=0;j<m-k;j++)    x=min(x,max(a[i+j],a[n+i+j-m]));
                ans=max(ans,x);
             }
            cout<<ans<<endl;    
         }
        return 0;
     }
  • 相关阅读:
    ADT Android Development Tools
    ADT下载地址(含各版本)
    如何在eclipse中添加android ADT
    3D MAX 人物骨骼建设
    如何绕开验证码(原理)
    二分查找 java
    Linux命令 cat命令
    Linux如何通过命令查看日志文件的某几行(中间几行或最后几行)
    Linux中显示一个文件最后几行的命令
    深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接
  • 原文地址:https://www.cnblogs.com/overrate-wsj/p/12255664.html
Copyright © 2020-2023  润新知