Codeforces 1335E2 - Three Blocks Palindrome (hard version)
Posted stelayuri
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces 1335E2 - Three Blocks Palindrome (hard version)相关的知识,希望对你有一定的参考价值。
题面
题意/解题思路
直接延用 Easy 版本的想法即可
详解见上一篇博客Codeforces 1335E1 - Three Blocks Palindrome (easy version)
完整程序
(93ms/2000ms)
#include<bits/stdc++.h>
using namespace std;
int ar[200050];
vector<int> v[210];
void solve()
{
int n,ans=0;
cin>>n;
for(int i=1;i<=200;i++)
v[i].clear();
for(int i=1;i<=n;i++)
{
cin>>ar[i];
v[ar[i]].push_back(i);
}
for(int i=1;i<=200;i++)
{
int cnt=v[i].size(),cntt;
ans=max(ans,cnt);
if(cnt<=1)
continue;
cntt=cnt/2;
int num[210]={0},mx=0;
for(int j=v[i][cntt-1]+1;j<v[i][cnt-cntt];j++)
num[ar[j]]++;
for(int j=1;j<=200;j++)
if(num[j]>mx)
mx=num[j];
ans=max(ans,mx+cntt*2);
for(int j=cntt-1;j>0;j--)
{
for(int k=v[i][j-1]+1;k<v[i][j];k++)
num[ar[k]]++;
for(int k=v[i][cnt-j-1]+1;k<v[i][cnt-j];k++)
num[ar[k]]++;
for(int k=1;k<=200;k++)
if(num[k]>mx)
mx=num[k];
ans=max(ans,mx+j*2);
}
}
cout<<ans<<‘
‘;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int T;cin>>T;
for(int t=1;t<=T;t++)
solve();
return 0;
}
以上是关于Codeforces 1335E2 - Three Blocks Palindrome (hard version)的主要内容,如果未能解决你的问题,请参考以下文章
codeforces-1335-E Three Blocks Palindrome
codeforces 653A A. Bear and Three Balls(水题)
Divide by Three CodeForces - 792C
题解[CodeForces1154A]Restoring Three Numbers