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 */