求调
查看原帖
求调
636409
Headofstate1945楼主2025/6/26 14:47
#include<bits/stdc++.h>
#define int unsigned long long
using namespace std;
const int N=5e3+5,M1=133331,M2=1145141;
int P1[N],P2[N],H[N][N];
set<int>S;
signed main(){
	cin.tie(0)->sync_with_stdio(0);
	int n,m;cin>>n>>m;
	int a,b;cin>>a>>b;
	P1[0]=1;P2[0]=1;
	for(int i=1;i<=max(n,m);i++)P1[i]=P1[i-1]*M1,P2[i]=P2[i-1]*M2;
	for(int i=1;i<=n;i++){
		string s;
		cin>>s;
		for(int j=1;j<=m;j++){
			H[i][j]=H[i][j-1]*M2+H[i-1][j]*M1-H[i-1][j-1]*M1*M2+s[j-1]-'0';
		}
	}
	for(int i=a;i<=n;i++){
		for(int j=b;j<=m;j++){
			S.insert(H[i][j]-H[i-a][j]*P1[a]-H[i][j-b]*P2[b]+H[i-a][j-b]*P1[a]*P2[b]);
		}
	}
	int q;cin>>q;
	while(q--){
		int sum=0;
		for(int i=1;i<=a;i++){
			string s;cin>>s;
			int ans=0;
			for(int j=1;j<=b;j++){
				ans=ans*M2+s[j-1]-'0';
			}
			sum=sum*M1+ans;
		}
		if(S.count(sum)==1)cout<<"1\n";
		else cout<<"0\n";
	}
	
	return 0
}
2025/6/26 14:47
加载中...