Codeforces Round #616 (Div. 2) 题解

Posted overrate-wsj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
 }

 

以上是关于Codeforces Round #616 (Div. 2) 题解的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #616 题解

Codeforces Round #616 (Div. 2)

Codeforces Round #616 (Div. 2)

Codeforces Round #616 (Div. 1)

Codeforces Round #616 部分题解

Codeforces Round #616(Div.2) Even But Not Even