CF958A2 Death Stars (medium) 题解
字符串哈希板子题。考虑如何将 std::map 存储,对于 map 中扫一遍,如果它的哈希值出现过就直接输出答案。
这里用的单模哈希,选的模数为
放代码:
#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+9,base=6803;
map<int,int> p;
main(){
ios::sync_with_stdio(false);
int n,m; cin>>n>>m;
vector<string> a(n),b(m);
for(auto &i:a)cin>>i;
for(auto &i:b)cin>>i;
for(int i=0;i<=n-m;i++){
int c=0;
for(int j=i;j<i+m;j++)
for(char k:a[j])c=(c*base+k-96)%mod;
p[c]=i+1; // 将哈希值存入 map
}
for(int i=0;i<=n-m;i++){
int c=0;
for(int j=0;j<m;j++)
for(int k=i;k<i+m;k++)
c=(c*base+b[j][k]-96)%mod;
if(p[c]){ // 该值存在
cout<<p[c]<<' '<<i+1<<endl; break;
}
}
return 0;
}