题目链接
杭电数据加强了,这个方法已经不行了,还是看官方正解dp吧= =
暴力出奇迹。。。
暴力匹配就好了,因为每个字符可以也只能交换一次位置,所以当前位置不配的话,就检查一下交叉的位置
#include<bits/stdc++.h>
using namespace std;
#define cl(a,b) memset(a,b,sizeof(a))
#define LL long long
#define pb push_back
#define gcd __gcd
const int maxn = 1e5+200;
const int inf = 1 << 23;
const LL P = 1e9+7;
int n,m;
char a[maxn],b[maxn];
int main(){
int T;scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
scanf("%s%s",a,b);
for(int i=0;i<n;i++){
bool flag = false;
bool isin = false;
for(int j=0;j<m&&i+m<=n;j++){
isin = true;
int k = i+j;
if(a[k]==b[j]){
;
}
else if(j+1<m&&a[k]==b[j+1]&&k+1<n&&a[k+1]==b[j]){
j++;
}
else {
flag=true;
}
if(flag)break;
}
printf("%c",isin==true&&flag==false?'1':'0');
}
puts("");
}
return 0;
}