码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces 1335E2 - Three Blocks Palindrome (hard version)

时间:2020-04-14 09:13:15      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:图片   logs   uri   i++   lan   ++   0ms   ack   log   


题面

技术图片




题意/解题思路

直接延用 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<<‘\n‘;
}
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)

标签:图片   logs   uri   i++   lan   ++   0ms   ack   log   

原文地址:https://www.cnblogs.com/stelayuri/p/12695392.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!