Animals
蒟蒻

Hash!

Panda一个字符串是否是另一个字符串的子串

#include<bits/stdc++.h>
using namespace std;
const int mod=998244353,tt=4567;
long long hash[10005],h,p[10005];
char s1[10005];
char s2[10005];
int H(int l,int r){
	return (hash[r]-(hash[l-1]*p[r-l+1])%mod+mod)%mod;
}
int main(){
	scanf("%s",s1+1);
	scanf("%s",s2+1);
	int l1=strlen(s1+1);
	int l2=strlen(s2+1);
	for(int i=1;i<=l1;i++) h=(h*tt+s1[i])%mod;
	hash[1]=s2[1];p[1]=tt;
	for(int i=2;i<=l2;i++) hash[i]=(hash[i-1]*tt+s2[i])%mod,p[i]=(p[i-1]*tt)%mod;
	for(int i=1;i+l1-1<=l2;i++){
		if(h==H(i,i+l1-1)){
			printf("yes");
			return 0;
		}
	}
	printf("no");
	return 0;
}
/*
prprprprprpprprprprppr
rpprprprprprprprprprpprprprprprpprpr
*/

  

posted @ 2018-11-02 08:38  年下丶  阅读(157)  评论(0编辑  收藏  举报
--- 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 百里守约 ---