码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #712 (Div. 2)(A~C)

时间:2021-04-06 14:48:59      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:force   putc   name   i++   std   --   转换   space   ==   

A. Déjà Vu

本题的思路是找一个位置使得新添加的a所对应的字符不是a即可。

AC代码如下(可能写复杂了):

#include<bits/stdc++.h>
#define MAXN 300005
using namespace std;
typedef long long ll;
int t,pos,flag;
char s[MAXN];
int main(){
    scanf("%d",&t);
    while(t--){
        flag=0,pos=-1;
        scanf("%s",s);
        int len=strlen(s);
        for(int i=0;i<len/2;i++){
            if((s[i]!=a&&s[i]==s[len-1-i])||(s[i]!=s[len-1-i])){
                if(s[len-1-i]==a){
                    for(int j=i;j<len;j++){
                        if(s[len-1-j]!=a){
                            pos=j;
                            flag=1;
                            break;
                        }
                    }
                    break;
                }else{
                    pos=i;
                    flag=1;
                    break;
                }
            }
        }
        if((!flag)&&(len&1)){
            if(s[len/2]!=a){
                pos=len/2;
                flag=1;
            }
        }
        if(flag){
            printf("YES\n");
            for(int i=0;i<pos;i++)
                putchar(s[i]);
            putchar(a);
            for(int i=pos;i<len;i++)
                putchar(s[i]);
            printf("\n");
        }else{
            printf("NO\n");
        }
    }
}    

B. Flip the Bits

本题是先找出a串的哪些位置可以进行转换。由于后面的位置转化后前面的也会进行转化,故我们从后面开始匹配。

我们遍历a串和b串找到他们不同的字符,表示需要奇数次转换。相同的字符则需要偶数次转换。

然后从后往前判断是否可行即可。

#include<bits/stdc++.h>
#define MAXN 300005
using namespace std;
typedef long long ll;
int t,n;
int pos[MAXN],cha[MAXN];
char a[MAXN],b[MAXN];
int main(){
    scanf("%d",&t);
    while(t--){
        int cnt=-1,cnt0=0,cnt1=0;//记录可变换的下标 
        memset(pos,0,sizeof(pos));
        memset(cha,0,sizeof(cha));
        scanf("%d",&n);
        scanf("%s%s",&a,&b);
        for(int i=0;i<n;++i){
            if(a[i]==0)
                ++cnt0;
            else
                ++cnt1;
            if(cnt0==cnt1){
                pos[i]=1;//pos记录第i个位置是否可以进行变化 
            }
        }
        for(int i=0;i<n;++i){
            if(a[i]!=b[i])
                cha[i]=1;//需要奇数次变化
            else
                cha[i]=0;//需要偶数次变化(0也算 
        } 
        int flag=1;
        for(int i=n-1;i>=0;--i){
            if(cha[i]==flag){
                if(pos[i])//如果该位置可以变化
                    flag=1-flag;//找下一个需要偶数次变化的位置
                else{
                    printf("NO\n");
                    break;
                }
            }
            if(i==0){
                printf("YES\n");
            }
        }
    }
}    

C. Balance the Bits

首先需要判断1的个数是否为偶数。如果不是偶数则返回no,如果是偶数,再判断0是否出现在开头和结尾那个字符。如果出现则返回no。

如果以上条件都满足那么就可以构成。

对于前一半的1我们用(,后一半用),对于0我们则交替的使用(和)即可。b串反着交替)和(即可。

AC代码如下:

#include<bits/stdc++.h>
#define MAXN 200005
using namespace std;
typedef long long ll;
int t,n;
char s[MAXN];
char a[MAXN],b[MAXN];
int main(){
    scanf("%d",&t);
    while(t--){
        scanf("%d",&n);
        scanf("%s",s);
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        int cnt=0;
        for(int i=0;i<n;i++){
            if(s[i]==1){
                ++cnt;
            }
        }
        if(cnt&1)
            printf("NO\n");
        else if(s[0]==0||s[n-1]==0){
            printf("NO\n");
        }else{
            int cnt1=0,flag=1;;
            for(int i=0;i<n;i++){
                if(s[i]==1){
                    ++cnt1;
                    if(cnt1<=cnt/2)
                        a[i]=b[i]=(;
                    else
                        a[i]=b[i]=);
                }else{
                    if(flag)
                        a[i]=(,b[i]=);
                    else
                        a[i]=),b[i]=(;
                    flag=1-flag;
                }
            }
            printf("YES\n%s\n%s\n",a,b);
        }
    }
}    

 

Codeforces Round #712 (Div. 2)(A~C)

标签:force   putc   name   i++   std   --   转换   space   ==   

原文地址:https://www.cnblogs.com/mikku39/p/14616706.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!