Submission #48086018


Source Code Expand

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define op(x) ((x&1)?x+1:x-1)
#define odd(x) (x&1)
#define even(x) (!odd(x))
#define lc(x) (x<<1)
#define rc(x) (lc(x)|1)
#define lowbit(x) (x&-x)
#define mp(x,y) make_pair(x,y)
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
using namespace std;
const int MAXN = 1e6+10,base=19260817,INF=1e9;
const ll base2=1145141,mod=1e9+9;

int n;
ull pw[MAXN],h[MAXN],rh[MAXN];
ll pw2[MAXN],h2[MAXN],rh2[MAXN];
string s;

int len[MAXN];

struct DSU{
	int fa[MAXN];
	void Init(){
		rep(i,1,n+1)fa[i]=i;
	}
	int find(int x){
		return (fa[x]==x)?(x):(fa[x]=find(fa[x]));
	}
	void merge(int x,int y){
		fa[x]=find(y);
	}
}dsu;

ll ans,buc[MAXN];

vector<int>o[MAXN];

int main(){
	ios::sync_with_stdio(false);

	cin>>s;n=s.length();s=" "+s;

	pw[0]=1;rep(i,1,n)pw[i]=pw[i-1]*base;
	pw2[0]=1;rep(i,1,n)pw2[i]=pw2[i-1]*base2%mod;
	rep(i,1,n)h[i]=h[i-1]*base+(s[i]-'a'+1);
	rep(i,1,n)h2[i]=(h2[i-1]*base2+(s[i]-'a'+1))%mod;
	per(i,n,1)rh[i]=rh[i+1]*base+(s[i]-'a'+1);
	per(i,n,1)rh2[i]=(rh2[i+1]*base2+(s[i]-'a'+1))%mod;

	dsu.Init();
	rep(i,1,n){
		int L=1,R=min(i-1,n-i),ret=0;
		while(L<=R){
			int mid=(L+R)>>1;
			ull H=h[i-1]-h[i-mid-1]*pw[mid],rH=rh[i+1]-rh[i+mid+1]*pw[mid];
			
			ll H2=h2[i-1]-h2[i-mid-1]*pw2[mid],rH2=rh2[i+1]-rh2[i+mid+1]*pw2[mid];
		
			H2=(H2%mod+mod)%mod;rH2=(rH2%mod+mod)%mod;

			if(H==rH && H2==rH2)ret=mid,L=mid+1;
			else R=mid-1;
		}	
		for(int p=dsu.find(i-ret);p<i;p=dsu.find(p)){
			dsu.merge(p,p+1);
			o[2*i-p].push_back(p);
		}
	}
	//
	ll sum=0;
	dsu.Init();
	rep(i,1,n){
		sort(o[i].begin(),o[i].end());
		buc[i]++;sum+=i;
		for(auto j:o[i])if(buc[j]){
			int k=dsu.find((i+j)/2);
			dsu.merge(j,k);
			sum+=buc[j]*(k-j);
			buc[k]+=buc[j];buc[j]=0;
		}
		ll val=1ll*(i+1)*i-sum;
		ans+=val;
	}

	//
	cout<<ans<<endl;
    return 0;
}

Submission Info

Submission Time
Task E - Half Palindromes
User Crying
Language C++ 20 (gcc 12.2)
Score 100
Code Size 1990 Byte
Status AC
Exec Time 228 ms
Memory 125216 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 100 / 100
Status
AC × 3
AC × 53
Set Name Test Cases
Sample s1.txt, s2.txt, s3.txt
All 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 30.txt, 31.txt, 32.txt, 33.txt, 34.txt, 35.txt, 36.txt, 37.txt, 38.txt, 39.txt, 40.txt, 41.txt, 42.txt, 43.txt, 44.txt, 45.txt, 46.txt, 47.txt, 48.txt, 49.txt, 50.txt, s1.txt, s2.txt, s3.txt
Case Name Status Exec Time Memory
01.txt AC 140 ms 87336 KiB
02.txt AC 140 ms 87308 KiB
03.txt AC 142 ms 87420 KiB
04.txt AC 141 ms 87340 KiB
05.txt AC 182 ms 108964 KiB
06.txt AC 182 ms 108936 KiB
07.txt AC 224 ms 125052 KiB
08.txt AC 224 ms 125040 KiB
09.txt AC 195 ms 117396 KiB
10.txt AC 127 ms 62896 KiB
11.txt AC 186 ms 113996 KiB
12.txt AC 228 ms 121920 KiB
13.txt AC 228 ms 119040 KiB
14.txt AC 224 ms 117924 KiB
15.txt AC 217 ms 117376 KiB
16.txt AC 198 ms 117172 KiB
17.txt AC 224 ms 117720 KiB
18.txt AC 217 ms 117388 KiB
19.txt AC 198 ms 117168 KiB
20.txt AC 228 ms 120840 KiB
21.txt AC 225 ms 117912 KiB
22.txt AC 218 ms 117400 KiB
23.txt AC 199 ms 117120 KiB
24.txt AC 228 ms 120564 KiB
25.txt AC 191 ms 117428 KiB
26.txt AC 165 ms 106484 KiB
27.txt AC 181 ms 117052 KiB
28.txt AC 192 ms 117408 KiB
29.txt AC 186 ms 116088 KiB
30.txt AC 186 ms 117388 KiB
31.txt AC 173 ms 112140 KiB
32.txt AC 192 ms 117116 KiB
33.txt AC 208 ms 117416 KiB
34.txt AC 183 ms 116860 KiB
35.txt AC 145 ms 90532 KiB
36.txt AC 220 ms 118164 KiB
37.txt AC 4 ms 3528 KiB
38.txt AC 5 ms 3532 KiB
39.txt AC 4 ms 3476 KiB
40.txt AC 4 ms 3472 KiB
41.txt AC 4 ms 3532 KiB
42.txt AC 5 ms 3472 KiB
43.txt AC 4 ms 3484 KiB
44.txt AC 4 ms 3480 KiB
45.txt AC 183 ms 117412 KiB
46.txt AC 183 ms 117376 KiB
47.txt AC 188 ms 118088 KiB
48.txt AC 223 ms 125216 KiB
49.txt AC 223 ms 124972 KiB
50.txt AC 223 ms 125064 KiB
s1.txt AC 5 ms 3532 KiB
s2.txt AC 4 ms 3480 KiB
s3.txt AC 4 ms 3400 KiB