Codeforces Round 906 (Div. 2)
A. Doremy's Paint 3
题目链接
判断给定的数组是不是满足a1+a2=a2+a3=a3+a4=......=an-1+an
A思路:
这个题一开始没有读仔细问题,导致一时间出错了,后来读清楚问题之后发现其实这个数组中只能出现两个数字,且两个数字之间的差值最多是1
A代码:
#include<bits/stdc++.h>
using namespace std;
void solve(){
int n;
cin>>n;
std::vector<int> v(n);
for(int i=0;i<n;i++){
cin>>v[i];
}
sort(v.begin(),v.end());
if(v[0]==v[n-1]){
cout<<"YES"<<endl;
return ;
}
int ans1,ans2;
ans1=ans2=0;
for(int i=0;i<n;i++){
if(v[i]==v[0]) ans1++;
if(v[i]==v[n-1]) ans2++;
}
if(abs(ans1-ans2)>1){
cout<<"NO"<<endl;
return ;
}
if(ans1+ans2!=n){
cout<<"NO"<<endl;
return ;
}
cout<<"YES"<<endl;
return ;
}
int main(){
int t=1;
cin>>t;
while(t--){
solve();
}
return 0;
}
B. Qingshan Loves Strings
题目链接
构造一个完美字符串string s
要求si不能等于si-1
给两个字符串s,t,可以将t插入s中使得s成为完美字符串
B思路:
数据量不是很大,所以一次for循环是可以解决的,只是需要在插入时候注意一下如何使得这个字符串变完美就好了,注意插入的字符串头和尾不能和原字符串插入的位置相同!
B代码:
#include<bits/stdc++.h>
using namespace std;
bool check(string s){
int l=s.length();
for(int i=1;i<=l-1;i++){
if(s[i]==s[i-1]){
return false;
}
}
return true;
}
void solve(){
int n,m;
cin>>n>>m;
string s,t;
cin>>s>>t;
if(check(s)){
cout<<"YES"<<endl;//如果自身就满足这个情况就不需要再添加了
return ;
}
if(!check(t)){
cout<<"NO"<<endl;
return ;
}
for(int i=1;i<=n-1;i++){
if(s[i]==s[i-1]&&(s[i-1]==t[0]||s[i]==t[m-1])){
cout<<"NO"<<endl;
return ;
}
}
cout<<"YES"<<endl;
}
int main(){
int t=1;
cin>>t;
while(t--){
solve();
}
return 0;
}
C. Qingshan Loves Strings 2
C思路:
首先就是进行一个特殊情况的判断:
1.如果字符串的长度不是偶数直接输出-1
2.如果01的个数不相等,那么也直接输出-1
我们在插入01字符串的时候同时也要更新字符串的长度,因为下一次比较的位置就不一样了
C代码:
#include<bits/stdc++.h>
using namespace std;
const int N=110*310;
char s[N];
// string s;
int n;
void insert(int x){
for(int i=n;i>=x+1;i--){
s[i+2]=s[i];
}
s[x+1]='0';
s[x+2]='1';
n+=2;
}
void solve(){
// int n;
cin>>n;
// string s;
// cin>>s;
for(int i=1;i<=n;i++){
cin>>s[i];
}
/*
首先就是进行一个特殊情况的判断:
1.如果字符串的长度不是偶数直接输出-1
2.如果01的个数不相等,那么也直接输出-1
*/
std::vector<int> v;
if(n%2){
cout<<-1<<endl;
return ;
}
int res=0;
for(int i=1;i<=n;i++){
int x=s[i]-'0';
res+=x;
}
if(res*2!=n){
cout<<-1<<endl;
return ;
}
int l=0;
int r=n;
while(l<r){
if(s[l+1]!=s[r]){
l++;
r--;
}
else{
if(s[l+1]=='0'&&s[r]=='0'){
v.push_back(r);
insert(r);
l++,r++;
}
else{
v.push_back(l);
insert(l);
l++,r++;
}
}
}
cout<<v.size()<<endl;
for(int i=0;i<v.size();i++){
cout<<v[i]<<" ";
}
cout<<endl;
}
int main(){
int t=1;
cin>>t;
while(t--){
solve();
}
return 0;
}
标签:std,906,string,int,Codeforces,--,solve,字符串,Div
From: https://www.cnblogs.com/du463/p/17805149.html