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

-
题意:给你一个字符串\(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; }
𝓐𝓬𝓱𝓲𝓮𝓿𝓮𝓶𝓮𝓷𝓽 𝓹𝓻𝓸𝓿𝓲𝓭𝓮𝓼 𝓽𝓱𝓮 𝓸𝓷𝓵𝔂 𝓻𝓮𝓪𝓵
𝓹𝓵𝓮𝓪𝓼𝓾𝓻𝓮 𝓲𝓷 𝓵𝓲𝓯𝓮

浙公网安备 33010602011771号