有人吗?帮蒟蒻调个题呗
  • 板块灌水区
  • 楼主cmpt_xiaoxiao
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/11/10 21:50
  • 上次更新2024/11/11 11:43:51
查看原帖
有人吗?帮蒟蒻调个题呗
954694
cmpt_xiaoxiao楼主2024/11/10 21:50

problem

二维hash模版题,code:

#include<iostream>
using namespace std;
typedef unsigned long long ull;
const int maxn=1e3+5;
const int b1=131;
const int b2=137;
int n,m,x,y,ans;
ull p1[maxn],p2[maxn],ha[maxn][maxn],hb[maxn][maxn];
ull get(ull h[][maxn],int x1,int y1,int x2,int y2){
    return h[x2][y2]
         -h[x1-1][y2]*p1[x2-x1+1]
         -h[x2][y1-1]*p2[y2-y1+1]
         +h[x1-1][y1-1]*p1[x2-x1+1]*p2[y2-y1+1];
}
int main(){
    p1[0]=p2[0]=0;
    for(int i=1;i<maxn;i++){
        p1[i]=p1[i-1]*b1;
        p2[i]=p2[i-1]*b2;
    }
    int t;
    cin>>t;
    while(t--){
        cin>>n>>m;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                char ch;
                cin>>ch;
                ha[i][j]=ch+ha[i-1][j]*b1+ha[i][j-1]*b2-ha[i-1][j-1]*b1*b2;
            }
        }
        cin>>x>>y;
        for(int i=1;i<=x;i++){
            for(int j=1;j<=y;j++){
                char ch;
                cin>>ch;
                hb[i][j]=hb[i-1][j]*b1+hb[i][j-1]*b2-hb[i-1][j-1]*b1*b2+ch;
            }
        }
        ans=0;
        for(int i=1;i<=n-x+1;i++){
            for(int j=1;j<=m-y+1;j++){
                if(hb[x][y]==get(ha,i,j,i+x-1,j+y-1)) ans++;
            }
        }
    }
    cout<<ans;
    return 0;
}
2024/11/10 21:50
加载中...