如题。为什么我的代码中的 M 改为21以上就过了,但是我认为开到11就够了,因为每10个长度为一个周期。
#include<bits/stdc++.h>
#define PII pair<int,int>
using namespace std;
typedef long long LL;
const int N=250,M=21;
int na,ma,nb,mb,nx,mx;
char a[N][N],b[N][N],x[N][N];
set<PII> s1, s2;
int main(){
cin>>na>>ma;
for(int i=1;i<=na;i++) cin>>(a[i]+1);
cin>>nb>>mb;
for(int i=1;i<=nb;i++) cin>>(b[i]+1);
cin>>nx>>mx;
for(int i=1;i<=nx;i++) cin>>(x[i]+1);
for(int i=1;i<=nx;i++)
for(int j=1;j<=mx;j++)
if(x[i][j]=='#')
s1.insert({i,j});
for(int i=1;i<=M;i++)
for(int j=1;j<=M;j++)
for(int k=1;k<=M;k++)
for(int l=1;l<=M;l++){
// cout<<i<<" "<<j<<" "<<k<<" "<<l<<"\n";
s2.clear();
for(int x1=1;x1<=M;x1++)
for(int y1=1;y1<=M;y1++)
if(a[x1][y1]=='#')
s2.insert({x1+i-1,y1+j-1});
for(int x1=1;x1<=M;x1++)
for(int y1=1;y1<=M;y1++)
if(b[x1][y1]=='#')
s2.insert({x1+k-1,y1+l-1});
if(s1.size()!=s2.size()) continue;
bool ok=1;
auto it=s1.begin(), it2=s2.begin();
PII lst1=*s1.begin(), lst2=*s2.begin();
for(;it!=s1.end();it++,it2++){
PII t1=*it, t2=*it2;
if(t1.first-lst1.first != t2.first-lst2.first){
ok=0;
break;
}
if(t1.second-lst1.second != t2.second-lst2.second){
ok=0;
break;
}
}
if(ok){
cout<<"Yes\n";
return 0;
}
}
cout<<"No\n";
return 0;
}