官方48,luogu 0?
查看原帖
官方48,luogu 0?
31184
卍xxoy卐楼主2020/12/18 11:55
#include<bits/stdc++.h>
using namespace std;
#define maxn 1043456

int m,k,T,nun=0,zz[26][maxn];
long long base=478923,momo=141919810,xx,ans,a[maxn];
long long bss[maxn];
	long long jie,jizhuner;
	int daner,bianjier,zxp;
	bool flagioi;
	int there[100],kioio;
	int czx[200];

long long suan(int x,int y)
{
	return (a[y]+momo-a[x-1]*bss[y-x+1]%momo)%momo;
}

void intakioi()
{
	char x;	x=getchar();
	while(x<'a'||x>'z'){	x=getchar();	}
	while('a'<=x&&x<='z')
	{ 
	if(!czx[x])
	{
	
	there[++kioio]=x-'a';
	czx[x]=kioio;	
	}
	a[++nun]=( a[nun-1]*base+x)%momo;
	for(int i=1;i<=kioio;i++) zz[there[i]][nun]=zz[there[i]][nun-1];
	zz[there[czx[x]]][nun]++;
	x=getchar();
	}
	bss[0]=1;
	bss[1]=base;
	for(int i=2;i<=nun;i++) bss[i]=bss[i-1]*base%momo;
	return;
}

void memx()
{
	memset(zz,0,sizeof(zz));
	memset(a,0,sizeof(a));
	ans=0;
	nun=0;
	kioio=0;
	memset(czx,0,sizeof(czx));
	return;
}
int kioi,zpioi;
int qiujishu(int l,int r)
{
	
	zpioi=0;
	for(int i=1;i<=kioio;i++)
	{
	kioi=zz[there[i]][r]-zz[there[i]][l-1];
		if((kioi)%2==1) zpioi++;
	}
	return zpioi;
}

void pao(int i)
{
			flagioi=0;
			daner=jie/i;
			if(i>1)
			{
				jizhuner=suan(1,daner);
		//	cout<<"zhun "<<jizhuner<<endl;
			
			for(int k=1;k<i;k++)
			{
				//cout<<suan(k*daner+1,(k+1)*daner)<<"\n";
				if(suan(k*daner+1,(k+1)*daner)!=jizhuner)
				{
					flagioi=1;
					break;
				}
			}
			if(flagioi) return;
			}

			for(int kx=1;kx<daner;kx++)
			{
				if(qiujishu(1,kx)<=zxp) ans++;
			}
		return;	
		}
		
void dfsp()
{

	for(jie=2;jie<nun;jie++)//1 to jie
	{
		zxp=qiujishu(jie+1,nun);
		//cout<<jie+1<<":"<<endl;
		bianjier=sqrt(jie);
		for(int pzz=1;pzz<=bianjier;pzz++)
		{
			if(jie%pzz==0) 
			{
			pao(pzz);
			if(pzz*pzz!=jie)
			pao(jie/pzz);
			}
			
		}
	}
	return;
}


int main()
{


cin>>T;
while(T--)
{
	
	memx();
	intakioi();
	dfsp();
	printf("%lld\n",ans);
}

	return 0;
}

全wa

2020/12/18 11:55
加载中...