为啥一直 T #11 啊
查看原帖
为啥一直 T #11 啊
1351126
General0826楼主2024/11/26 15:51
#include <bits/stdc++.h>
#define ull unsigned long long
using namespace std;
const int N=2e6+5,P=13331;
ull h[N],pw[N],dp[N],f[N],cnt=0;
char s[N],c;
int n;
ull get(int l,int r){
	return h[r]-h[l-1]*pw[r-l+1];
}
ull teg(int l,int r){
	return f[l]-f[r+1]*pw[r-l+1];
}
int main(){
	do{
		c=getchar();
		s[++n]=c;
	}while(c!=EOF);
	pw[0]=1;
	for(int i=1;i<=n;i++){
		pw[i]=pw[i-1]*P;
		h[i]=h[i-1]*P+s[i];
	}
	for(int i=n;i>=1;i--){
		f[i]=f[i+1]*P+s[i];
	}
	for(int i=1;i<=n;i++){
		if(get(1,i>>1)==teg(i-(i>>1)+1,i))
			dp[i]=dp[i>>1]+1;
		cnt+=dp[i];
	}
	cout<<cnt;
	return 0;
}


2024/11/26 15:51
加载中...