[Codeforces958A2]Death Stars (medium)(字符串+hash)
Posted void_f
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Codeforces958A2]Death Stars (medium)(字符串+hash)相关的知识,希望对你有一定的参考价值。
Description
Solution
这里用类似hash的方法将判断2个矩阵是否相同的时间降为O(m),总时间复杂度为O(m3)
对于一行字符串s[i],它的hash值为∑(j*s[i][j])%mo,(1≤j≤m),mo为一个大质数
理论上来说,可能会出现2个不同字符串hash值相等,但cf上测是没有
Code
#include <cstdio> #include <algorithm> #include <cstring> using namespace std; const int mo=997; int n,m,AA[2010],BB[210][2010]; char A[2010][210],B[210][2010],tmp[210][210]; int main(){ scanf("%d%d\n",&n,&m); for(int i=1;i<=n;++i){ scanf("%s\n",A[i]+1); for(int j=1;j<=m;++j) AA[i]=(AA[i]+(A[i][j]-97+1)*j)%mo; } for(int i=1;i<=m;++i){ scanf("%s\n",B[i]+1); for(int j=1;j+m-1<=n;++j){ int r=j+m-1; for(int k=j,kk=1;k<=r;++k,++kk) BB[i][j]=(BB[i][j]+(B[i][k]-97+1)*kk)%mo; } } for(int q=1;q+m-1<=n;++q) for(int g=1;g+m-1<=n;++g){ bool b=1;int tmp=0; for(int i=1,j=q;i<=m;++i,++j) if(AA[j]!=BB[i][g]){b=0;break;} if(b){ printf("%d %d\n",q,g); return 0; } } return 0; }
以上是关于[Codeforces958A2]Death Stars (medium)(字符串+hash)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #382 (Div. 2) 继续python作死
codeforces 723F : st-Spanning Tree