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 (Div. 2)
Codeforces Round #616 (Div. 2)