首页 > 其他分享 >Codeforces Round 906 (Div. 2)

Codeforces Round 906 (Div. 2)

时间:2023-11-02 12:55:27浏览次数:53  
标签:std 906 string int Codeforces -- solve 字符串 Div

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

相关文章

  • [ARC159F] Good Division 题解
    [ARC159F]GoodDivision题解首先对于题目要求的划分方式转化一下,转化为划分的每一段都没有绝对众数,可以证明这与题目中的要求是完全等价的,证明如下:充分性:考虑构造一种操作方法,就是每次操作都消去一个出现次数最多的数,按照这样操作可以保证每次操作之后该区间仍然不会出现绝对......
  • Codeforces Round 907 (Div. 2) B. Deja Vu(二分+后缀和+位运算)
    CodeforcesRound907(Div.2)B.DejaVu思路:预处理31位的\(2^x\)存在\(tmp_i\)对于输入\(a_i\),通过查找最后一个二进制1位置,存在\(x0_i\)由题意可知,对于输入的\(x\),如果有\(a_i\)可整除\(x\),则会使\(a_i\)加上\(2^{x-1}\)所以之后除非是\(x-1\),否则无效,因此把输入\(x\)......
  • Codeforces Round 907 (Div. 2)
    CodeforcesRound907(Div.2)A.SortingwithTwos题意:给一个长度为n的数组,可以做任意次以下操作:选择一个整数m,将1-2m的数减1。若能使数组变为一个单调递增的数组则输出YES,否则输出NO分析:只需要保证2m+1-2m+1单调递增即可代码:#include<bits/stdc++.h>usingnamespace......
  • Man or Honor 怒海潜将,壮志潜龙 美军的Navy Dive Carl Brashear
    上午路上刷到一个电影解说,讲的是CarlBrashear,从一位黑人少年,成长为美军中潜水不对MasterChief的传奇经历。人啊,凡事要靠自己,自我成长比什么都重要。剧中的那句ASNF-ASonNeverForgets,赤子之心,是发人深省的警句。......
  • Codeforces Round 906 Div. 1 (CF1889)
    貌似现在发周六的CF题解已经失去了时效性,不过问题不大。A.QingshanLovesStrings2Description定义一个长度为\(k\)的\(01\)串\(s\)是好的,当且仅当\(\foralli\in[1,k],s_i\neqs_{k-i+1}\)。现给你一个串,每次操作你可以在任意位置插入一对\(01\)。请构造操作方......
  • Codeforces Round 906 (Div. 2)A-E1
    A.Doremy'sPaint3记数组中数的种类数为\(k\),当\(k=1\)时,答案为\(yes\);当\(k=2\)时,记两个种类的数的个数差为\(d\),当\(d≤1\)时,答案为\(yes\);其他情况答案为\(no\)。时间复杂度:\(O(nlogn)\)1voidsolve()2{3intn;cin>>n;45map<int,int>mp;6......
  • Codeforces Round 895
    提炼感觉这种题还是很金典的我们看到乘积就应该想到其很容易爆而我们省1的话也最多就是2e5数量级的我们为了省事不用算上界可以直接把这个上界设为1e9也不会爆LL只要乘积突破这个上界我们就肯定要是有旁边的大于1的数我们都要吃掉因为增量都超过了1e9那么多我们只要......
  • codeforces 1829G. Hits Different 容斥原理+记忆化搜索
    题目描述:给定一个n,把n给打倒,然后递归的求出包含n在内的上面所有的会倒下的瓶子值的平方和。这里使用二分先求出目前给定的n的行号i和列号j。观察可以发现,对于所有的列号j,j=1或者j=i时,是需要考虑往上单边的总和,其他情况都有两个分支。再观察可以发现,两个分支在再上一行的重合部......
  • CodeForces 1246F Cursor Distance
    洛谷传送门CF传送门发现一个性质:能跳不超过\(j\)步到达\(i\)的所有点形成一段区间。设这这段区间为\([L_{i,j},R_{i,j}]\)。那么答案即为:\[\sum\limits_{i=1}^n\sum\limits_{j=0}n-R_{i,j}+L_{i,j}-1\]并且:\[[L_{i,j},R_{i,j}]=\bigcup\limits_......
  • 视频直播app源码,CSS div水平垂直居中和div置于底部
    视频直播app源码,CSSdiv水平垂直居中和div置于底部一、水平居中 .hor_center{  margin:0auto;}​二、水平垂直居中 .content{  width:360px;  height:240px;} .ver_hor_center{  position:absolute;  top:50%;  left:50%;  margi......