Codeforces Round 906 (Div. 2)
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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现