hack 数据错掉了
查看原帖
hack 数据错掉了
572133
潘德理2010楼主2023/12/14 23:22

一段时间以前我曾经请求加过一个 hack 数据。

但这个数据貌似错掉了。我在本地构建了数据,能够输出正确答案。在 LOJ 是提交也得到 AC。我怀疑是 hack 数据出了问题。

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
inline int read(){
    int x=0;int ch=getchar();
    while (!isdigit(ch)&&(ch!=EOF)) ch=getchar();
    while (isdigit(ch)){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
    return x;
}
int n,f[500050],t,a,b,m,l,x,y,d,g,pr[100050],pc;
ll h[500050],p[500050],r=1e9+7;
char s[500050];
inline bool ch(int k){
	if(h[b]-h[a+k-1]==(h[b-k]-h[a-1])*p[k]) return true;
	return false;
}
int main(){
//	freopen("test1.in","r",stdin);
	n=read();
	for(int i=1;i<=n;i++){
		char c;
		while(1){
			c=getchar();
			if(c!=EOF) break;
		}
		s[i]=c;
	}
	t=read();
	for(int i=2;i<=n;i++){
		if(!f[i]) f[i]=i,pr[++pc]=i;
		for(int j=1;j<=pc;j++){
			if(i*pr[j]>n) break;
			if(!f[i*pr[j]]) f[i*pr[j]]=pr[j];
			if(i%pr[j]==0) break;
		}
	}
	p[0]=1;
	for(int i=1;i<=n;i++) p[i]=p[i-1]*r;
	for(int i=1;i<=n;i++) h[i]=h[i-1]+s[i]*p[i];
	while(t--){
		a=read(),b=read();
		m=b-a+1,l=m,d=m,g=m;
		while(m>1){
			x=f[m],y=0;
			while(f[m]==x){
				m/=f[m];
				y++;
			}
			d=g;
			for(int i=1;i<=y;i++){
				d/=x;
				if(ch(d)) l/=x;
				else break;
			}
		}
		printf("%d\n",l);
	}
	return 0;
}
2023/12/14 23:22
加载中...