mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
6d0ead9b6a
5300-5399
58 lines
1.2 KiB
C++
58 lines
1.2 KiB
C++
#include<cstdio>
|
|
#include<cstring>
|
|
#include<algorithm>
|
|
#include<iostream>
|
|
using namespace std ;
|
|
const int maxn = 2e5 + 10 ;
|
|
int str[maxn] ;
|
|
int p[maxn] ;
|
|
void pk(int n)
|
|
{
|
|
int i;
|
|
int mx = 0;
|
|
int id=0;
|
|
for(i=0; i<n; i++)
|
|
{
|
|
if( mx > i )
|
|
p[i] = min( p[2*id-i], mx-i );
|
|
else
|
|
p[i] = 1;
|
|
for(; str[i+p[i]] == str[i-p[i]] && i - p[i] >= 0 && i + p[i] < n; p[i]++);
|
|
if( p[i] + i > mx )
|
|
{
|
|
mx = p[i] + i;
|
|
id = i;
|
|
}
|
|
}
|
|
}
|
|
int main()
|
|
{
|
|
int t ;
|
|
int cas = 0 ;
|
|
int n ;
|
|
scanf("%d" , &t) ;
|
|
while(t--)
|
|
{
|
|
scanf("%d" , &n) ;
|
|
for(int i = 0;i <= 2*n+1;i++)
|
|
p[i] = 0 ;
|
|
int len = 0 ;
|
|
str[len++] = -1 ;
|
|
for(int i = 1;i <= n;i++)
|
|
{
|
|
scanf("%d" , &str[len++]) ;
|
|
str[len++] = -1 ;
|
|
}
|
|
int ans = 1 ;
|
|
pk(len) ;
|
|
for(int i = 2;i < len-1 ;i += 2)
|
|
for(int j = ans;j <= p[i] ;j += 2)
|
|
if(p[i + j -1]>= j)
|
|
ans = j;
|
|
ans = ans/2*3 ;
|
|
printf("Case #%d: ",++cas) ;
|
|
cout<<ans<<endl;
|
|
}
|
|
return 0 ;
|
|
}
|