P7114被卡常了,92pts
  • 板块灌水区
  • 楼主xyz123
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/11/2 21:52
  • 上次更新2024/11/3 09:56:46
查看原帖
P7114被卡常了,92pts
379926
xyz123楼主2024/11/2 21:52

如题

#include<bits/stdc++.h>
using namespace std;
const int N=1100000;
char s[N];
unsigned int cnt[N];
unsigned int cnt2[27][N];
unsigned int nxt[N];
unsigned int n,ddd;
unsigned int h[N],e[15000000],ne[15000000],idx;
inline void work(){
	scanf("%s",s+1);n=strlen(s+1);
	for(unsigned int i=2;i<=n;++i){
		unsigned int j=nxt[i-1];
		while(j&&s[j+1]!=s[i])	j=nxt[j];
		if(s[j+1]==s[i])	nxt[i]=j+1;
		else    nxt[i]=0;
	}
	for(unsigned int i=1;i<=n;++i){
		cnt[i]=cnt[i-1]^(1u<<(s[i]-'a'));
		unsigned int tmp=__builtin_popcount(cnt[i]);
		cnt2[0][i]=cnt2[0][i-1];
		cnt2[1][i]=cnt2[1][i-1];
		cnt2[2][i]=cnt2[2][i-1];
		cnt2[3][i]=cnt2[3][i-1];
		cnt2[4][i]=cnt2[4][i-1];
		cnt2[5][i]=cnt2[5][i-1];
		cnt2[6][i]=cnt2[6][i-1];
		cnt2[7][i]=cnt2[7][i-1];
		cnt2[8][i]=cnt2[8][i-1];
		cnt2[9][i]=cnt2[9][i-1];
		cnt2[10][i]=cnt2[10][i-1];
		cnt2[11][i]=cnt2[11][i-1];
		cnt2[12][i]=cnt2[12][i-1];
		cnt2[13][i]=cnt2[13][i-1];
		cnt2[14][i]=cnt2[14][i-1];
		cnt2[15][i]=cnt2[15][i-1];
		cnt2[16][i]=cnt2[16][i-1];
		cnt2[17][i]=cnt2[17][i-1];
		cnt2[18][i]=cnt2[18][i-1];
		cnt2[19][i]=cnt2[19][i-1];
		cnt2[20][i]=cnt2[20][i-1];
		cnt2[21][i]=cnt2[21][i-1];
		cnt2[22][i]=cnt2[22][i-1];
		cnt2[23][i]=cnt2[23][i-1];
		cnt2[24][i]=cnt2[24][i-1];
		cnt2[25][i]=cnt2[25][i-1];
		cnt2[26][i]=cnt2[26][i-1];
		for(unsigned int j=tmp;j<=26;++j)	cnt2[j][i]=cnt2[j][i-1]+1;
	}
	unsigned long long ans=0;
	for(unsigned int pl=3;pl<=n;++pl){
		unsigned int h1=pl-1-nxt[pl-1];
		unsigned int tmp=__builtin_popcount(cnt[n]^cnt[pl-1]);
		if((pl-1)%h1){
			ans+=cnt2[tmp][pl-2];
		}
		else{
			for(unsigned int i=h[(pl-1)/h1];i;i=ne[i]){
				ans+=cnt2[tmp][e[i]*h1-1];
			}
		}
	}
	printf("%lld\n",ans);
	return;
}
int main(){
	for(unsigned int i=1;i<=(1<<20);++i){
		for(unsigned int j=i;j<=(1<<20);j+=i){
			e[++idx]=i;ne[idx]=h[j];h[j]=idx;
			ddd++;
		}
	}
	unsigned int T;scanf("%d",&T);
	while(T--)	work();
	return 0;
}

2024/11/2 21:52
加载中...