题目:http://codeforces.com/contest/1400/problem/C
题解:s[i]=='0'时 i>=x w[i-x]='0';
i+x<n w[i+x]='0';
此时对w数组拥有最少的'0',使其满足s数组0的位置; 为了尽可能满足s数组1的位置, 只需要考虑让w其他位置全部为1
再由w正向推s, 若不能推出 输出-1;
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
#include<cstdlib>
#include<utility>
using namespace std;
#define IOS ios::sync_with_stdio(false)
#define LL long long
const int inf=0x3f3f3f3f;
int maxn=1e5;
int main(){
int T; cin>>T;
while(T--){
string s;
int x;
cin>>s>>x;
int n=int(s.size());
string w(n,'1');
for(int i=0;i<s.size();i++){
if(s[i]=='0'){
if(i>=x) w[i-x]='0';
if(i+x<n) w[i+x]='0';
}
}
int flag=1;
for(int i=0;i<n;i++){
bool one=false;
one=one||(i-x>=0&&w[i-x]=='1');
one=one||(i+x<n&&w[i+x]=='1');
if(s[i]!=one+'0'){
cout<<-1<<endl;
flag=0;
break;
}
}
if(flag)cout<<w<<endl;
}
}