Reconstrucción de cadenas binarias
Título:
Considere el siguiente proceso. Tienes una cadena binaria ww de longitud nw también tiene un número enteroxxx . Construiste una longitud denncadena binariass de ns . Cadena binariasss primeroiiLa selección de i cadenas es la siguiente:
1. Siwi - x w_ (i − x)wi - xExiste y es igual a 1 11 , luegosi s_isyoEs igual a 1 11 .
2. Si $ w_ {i + x} existe y es igual a1 11 , luegosi s_isyoEs igual a 1 11 .
3. Si las dos primeras condiciones no existen, entoncessi s_isyoEs igual a 0 00。
Dale la cuerda sssy enteroxxx , construye la cadenawww。
Análisis: Las reglas nos dicen si si s_isyoHasta las 111 , luegowi - x w_ {i − x}wi - x和wi + x w_ {i + x}wi + xAl menos uno de ellos es 1 11 . Sisi s_isyoEs 0 00 , luegowi - x w_ {i − x}wi - x和wi + x w_ {i + x}wi + xTodo 0 00 . Entonces primero ponemoswwestablecer todo w en1 11 , el requisito es0 00 lugares todos se convierten en0 00 . Luego, verifique si la cadena construida cumple con los requisitos. Puedes ver el código.
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+10;
char s[maxn];
int x;
char str[maxn];
int main() {
int _;
scanf("%d", &_);
while (_--) {
int flag = false;
scanf("%s%d", s, &x);
int len = strlen(s);
for (int i = 0; i < len; i++) {
str[i] = '1';
}
str[len]='\0';
for (int i = 0; i < len; ++i) {
if (s[i] == '0' && i - x >= 0) str[i - x] = '0';
if (s[i] == '0' && i + x < len) str[i + x] = '0';
}
for (int i = 0; i < len; ++i) {
if (s[i] == '0')continue;
bool flag1 = false;
if ((i - x >= 0 && str[i - x] == '1') || (i + x < len && str[i + x] == '1')) flag1 = true;
if (!flag1) {
flag = true;
break;
}
}
if (flag) puts("-1"); else printf("%s\n", str);
}
return 0;
}