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 |
|
|
| 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 |