标签: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