水题
暴力染色就好了
#include<bits/stdc++.h>
using namespace std;
int goal[2001][2001]={};
int mmp[1001][1001]={};
int St[1001*1001][2]={};
int top=0;
//int n;
int main(){
// freopen("3469.in","r",stdin);
int T;
scanf("%d",&T);
while(T--){
memset(goal,0,sizeof(goal));
memset(mmp,0,sizeof(mmp));
int n,m,a,b;
scanf("%d%d%d%d",&n,&m,&a,&b);
// int Firx=-1;
// int Firy=-1;
int top=0;
for(int i=1;i<=n;i++){
char s[1001];
scanf("%s",s);
for(int j=0;j<m;j++){
if(s[j]=='x'){
goal[i][j+1]=1;
}
}
}
for(int i=1;i<=a;i++){
char s[1001];
scanf("%s",s);
for(int j=0;j<b;j++){
if(s[j]=='x'){
mmp[i][j+1]=1;
top++;
{
St[top][0]=i-St[1][0];
St[top][1]=j+1-St[1][1];
}
}
}
}
if(top==0){
cout<<"NIE"<<'\n';
continue;
}
St[1][0]=St[1][1]=0;
// for(int i=1;i<=top)
int flag=1;
// cout<<top<<'\n'
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(goal[i][j]==1){
goal[i][j]==1;
for(int k=1;k<=top;k++){
int x=i+St[k][0];
int y=j+St[k][1];
if(x<=0||y<=0){
flag=0;
break;
}
// cout<<i<<" "<<j<<" "<<x<<" "<<y<<" "<<flag<<'\n';
if(goal[x][y]==0){
flag=0;
break;
}
goal[x][y]=0;
}
}
if(flag==0)
break;
}
if(flag==0)
break;
}
if(flag==1){
cout<<"TAK"<<'\n';
}
else cout<<"NIE"<<'\n';
}
}