求助,关于哈希3天死于90pts
  • 板块学术版
  • 楼主LBJ216
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/11/11 09:33
  • 上次更新2023/10/27 03:27:02
查看原帖
求助,关于哈希3天死于90pts
767179
LBJ216楼主2022/11/11 09:33

Power Strings 原题来自:POJ 2406

明明是对的啊~~~

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
const int maxn=1e6+10;
int m;
char s2[maxn];
ull power[maxn];
ull h[maxn];
ull b=131,mod=1<<31;//b与mod互质 131
bool check(ull s,int k)
{
	for(ull j=0;j<m;j+=k){//①j<m;②j+=i  ③<ull!!!>
		if(s!=h[j+k]-h[j]*power[k])return 0;
	}
	return 1;
}
int main()
{
	power[0]=1;
	for(int i=1;i<=101000;i++)power[i]=power[i-1]*b;
	
	while(scanf("%s",s2+1))//字符串可不用&
	{
	    if(s2[1]=='.')break;
		m=strlen(s2+1);
		h[0]=0;
		for(int i=1;i<=m;i++){h[i]=(h[i-1]*b+(ull)(s2[i]-'A'+1))%mod;}
		
		for(int i=1;i<=m;i++)
		{
			if(m%i==0)
			{
			    if(check(h[i],i)==1)
			    {
				printf("%d\n",m/i);
				break;
			    }
			}
		}
	}
	return 0;
}
2022/11/11 09:33
加载中...