清题笔记hdu多校8 1009 Isomorphic Strings

思路

把长度为n的字符串分解成多个同构循环子串,这题是直接暴力求n的因子个数,每个因子看可不可分解,用哈希值存储第一个子串的同构循环子串,进行比较。

这题主要是同构循环子串是怎么设定哈希值的比较烦,直接记下模版吧。
题解代码来源

#include
#define ll long long
using namespace std;
using namespace std;
const int mod=1e7+7;
const int base=1331;
const int N=5e6+10;
int T;
int n;
char s[N];
int p[N],a[N];
int jl[mod];
int js(int l,int r) { // 子串哈希值
 return (a[r]-1ll*a[l-1]*p[r-l+1]%mod+mod)%mod;
}
int tot=0; //时间戳
bool pd(int k,int id) {
 if(k==1) return 0;
 int len=n/k;
 int l=1,r=len;
 jl[js(1,len)]=id;
 for(int i=1;i

你可能感兴趣的:(题解,#哈希)