听灌佬多
  • 板块灌水区
  • 楼主__ycy1124__
  • 当前回复7
  • 已保存回复7
  • 发布时间2024/7/15 11:14
  • 上次更新2024/7/16 18:58:27
查看原帖
听灌佬多
1287433
__ycy1124__楼主2024/7/15 11:14

原题链接

#include<bits/stdc++.h>
using namespace std;
unsigned long long qzh[200001],hzh[400001],base=1000007,md=1333331,w[200001];
int a[200005];
int ans,bj[200001],ansj;
void read(int &x){
	x=0;
	int f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-'){
			f=-f;
		}
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		x*=10;
		x+=ch-'0';
		ch=getchar();
	}
	x*=f;
}
int main(){
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		read(a[i]);
	}
	w[0]=1;
	for(int i=1;i<=n;i++){
		qzh[i]=(qzh[i-1]*base+a[i])%md;
		hzh[n-i+1]=(hzh[n-i+2]*base+a[i])%md;
		w[i]=w[i-1]*base;
	}
	set <unsigned long long> s;
	for(int i=1;i<=n&&n/i>=ans;i++){
		int js=0;
		s.clear();
		for(int j=i;j<=n;j+=i){
			unsigned long long x1,x2,x3;
			//cout<<x1<<' '<<x2<<'\n';
			x1=qzh[j]-qzh[j-i]*w[i];
			x2=hzh[j-i+1]-hzh[j+1]*w[i];
			x1%=md;
			x2%=md;
			x3=x1*x2%md;
			if(s.count(x3)){
			}
			else{
				s.insert(x3);
				js++;
			}
		}
		js=min(js,n/i);
		if(js==ans){
			bj[++ansj]=i;
		}
		else if(js>ans){
			ans=js;
			ansj=0;
			bj[++ansj]=i;
		}
	}
	printf("%d %d\n",ans,ansj);
	for(int i=1;i<=ansj;i++){
		printf("%d ",bj[i]);
	}
	return 0;
}
2024/7/15 11:14
加载中...