C. Binary String Reconstruction (Round 94字符串构造)

tech2025-09-09  37

链接

题意: 给出一个01字符串w 和 正整数 x,可以通过以下规则构造出 s : 1、当 w[i-x] 存在 且 w[i-x] ==‘1’ 时 s[i] = ‘1’; 2、当 w[i+x]存在 且 w[i+x] ==‘1’ 时 s[i] = ‘1’; 否则 s[i] = ‘0’; 给出 s 串,求 w 串。若存在则输出 w ,否则输出 -1;

思路: 对于s[i]=‘0’,则若 w[i-x] 存在则 w[i-x] 必为‘0’,若 w[i+x] 存在则 w[i+x] 必为‘0’。 所以此时 w 串满足了 s 中的 ‘0’ ,然后剩下的 w[i] 就全置为 ‘1’,接下来我们检验此时的 w 串是否满足 s 中的 ‘1’ 即可。

#include<bits/stdc++.h> using namespace std; const int N = 100010; char s[N],w[N]; int n,x; int main() { int T;cin>>T; while(T--){ cin>>s+1>>x; n = strlen(s+1); for(int i=1;i<=n;i++) w[i] = '1'; for(int i=1;i<=n;i++){ if(s[i]=='0'){ if(i-x>=1) w[i-x] = '0'; if(i+x<=n) w[i+x] = '0'; } } int flag=1; for(int i=1;i<=n;i++){ if(s[i]=='1'){ //检验 s中的 01是否冲突 if(i-x>=1&&w[i-x]=='1'); else if(i+x<=n&&w[i+x]=='1'); else flag=0; } } if(flag) for(int i=1;i<=n;i++) cout<<w[i]; else cout<<"-1"; cout<<"\n"; } return 0; }
最新回复(0)