qinshi0308 @ 2024-08-31 23:11:11
在#6和#12WA\ 评测记录
# include <bits/stdc++.h>
using namespace std;
long long d1[500010],d2[500010];
int main(){
int n;
string s;
cin>>n>>s;
for(int i=0,l=0,r=-1;i<n;i++){
int k=(i>r?1:min(d1[l+r-i],r-i+1ll));
while(i-k>=0&&i+k<n&&s[i-k]==s[i+k]){
k++;
}
d1[i]=k--;
if(i+k>r){
l=i-k;
r=i+k;
}
}
for(int i=0,l=0,r=-1;i<n;i++){
int k=(i>r?0:min(d2[l+r-i+1],r-i+1ll));
while(i-k-1>=0&&i+k<n&&s[i-k-1]==s[i+k]){
k++;
}
d2[i]=k--;
if(i+k>r){
l=i-k-1;
r=i+k;
}
}
long long ans=0;
for(int i=0;i<n;i++){
long long d2i_=d2[i];
while(d2i_){
if(d2i_%2==0){
int a=i-d2i_/2;
int b=i+d2i_/2;
if(d2[a]*2>=d2i_&&d2[b]*2>=d2i_){
ans=max(ans,d2i_*2);
break;
}
}else{
int a=i-d2i_/2-1;
int b=i+d2i_/2;
if(d1[a]*2-1>=d2i_&&d1[b]*2-1>=d2i_){
ans=max(ans,d2i_*2);
break;
}
}
d2i_--;
}
}
cout<<ans;
return 0;
}
by qinshi0308 @ 2024-08-31 23:13:14
讨论区的几个hack都试了一遍,没问题
by _Yonder_ @ 2024-08-31 23:37:45
马拉车是这样写的吗?隔开相邻字符的特殊符号在哪里?
by qinshi0308 @ 2024-09-01 16:16:12
没事了,题目漏看了一点(
by qinshi0308 @ 2024-09-01 16:16:47
@Yonder 这样写是没问题的,可以不用特殊符号