码迷,mamicode.com
首页 > 其他好文 > 详细

[Codeforces958A2]Death Stars (medium)(字符串+hash)

时间:2018-04-15 11:50:37      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:href   rip   bsp   http   return   names   amp   des   ons   

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)

标签:href   rip   bsp   http   return   names   amp   des   ons   

原文地址:https://www.cnblogs.com/void-f/p/8836548.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!