算法:字符串哈希 方法通过将字符串的每一位字符转化为一个P进制数(P一般取较大的素数,如131,1007等)取模或用$unsigned long long$自然溢出,再利用前缀和求区间和进行匹配
参考代码:
#include <bits/stdc++.h> using namespace std; typedef unsigned long long ULL; int res; string s; int const P=131; //这里使用131进制数 ULL p[1000010],f[1000010]; //转化进制是用的数组和前缀和数组 int main(){ f[0]=0,p[0]=1; cin>>s; s=" "+s; for (int i=1;i<=s.length();i++){ f[i]=f[i-1]*P+(s[i]-'a'+1); //将s转化为数 p[i]=p[i-1]*P; //和转化进制的方式相似 } int n; ULL res1,res2; scanf("%d",&n); int l1,l2,r1,r2; for (int i=1;i<=n;i++){ scanf("%d %d %d %d",&l1,&r1,&l2,&r2); res1=f[r1]-f[l1-1]*p[r1-l1+1]; res2=f[r2]-f[l2-1]*p[r2-l2+1]; if (res1==res2) printf("Yes\n"); else printf("No\n"); } return 0; }
题目3151 兔子与兔子
6
评论
2023-07-21 17:05:59
|