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

Educational Codeforces Round 94 (Rated for Div. 2) C. Binary String Reconstruction (构造)

时间:2020-09-17 15:39:22      阅读:23      评论:0      收藏:0      [点我收藏+]

标签:return   lan   load   一个   lse   ++i   地方   bre   ons   

技术图片

  • 题意:给你一个字符串\(s\),原字符串为\(w\),如果\(i>x\)\(w_{i-x}=1\),那么\(s_{i}=1\),如果\(i+x\le n\)\(w_{i+x}=1\),那么\(s_{i}=1\),否则\(s_{i}=0\).求\(w\)的一种可能的情况.

  • 题解:对于\(s\)中的\(0\),我们知道,它左右两边距离\(x\)的地方一定都是\(0\),所以我们先假设\(w\)全为\(1\),然后再更新\(s_{i}\)\(0\)的情况,最后判断一下\(1\)的情况在\(w\)合不合法即可.

  • 代码:

    int t;
    char s[N],w[N];
    int x;
     
    int main() {
        //ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
        t=read();
        while(t--){
            scanf("%s",s+1);
            x=read();
            int len=strlen(s+1);
            for(int i=1;i<=len;++i){
                w[i]=‘1‘;
            }
            for(int i=1;i<=len;++i){
                if(s[i]==‘0‘){
                    if(i>x) w[i-x]=‘0‘;
                    if(i+x<=len) w[i+x]=‘0‘;
                }
            }
            bool flag=1;
            for(int i=1;i<=len;++i){
                if(s[i]==‘1‘){
                   if(((i>x && w[i-x]!=‘1‘)||(i<=x)) && ((i+x<=len && w[i+x]!=‘1‘)||(i+x>len))){
                       flag=0;
                       break;
                   }
                }
            }
     
            if(!flag) puts("-1");
            else{
                for(int i=1;i<=len;++i) printf("%c",w[i]);
            }
            puts("");
        }
     
        return 0;
    }
    

Educational Codeforces Round 94 (Rated for Div. 2) C. Binary String Reconstruction (构造)

标签:return   lan   load   一个   lse   ++i   地方   bre   ons   

原文地址:https://www.cnblogs.com/lr599909928/p/13619436.html

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