Three Blocks Palindrome (easy version)[暴力-预处理]
给定一个数组,找出最长的子序列,满足
|
\(\color{Red}{---------------------华丽分割线w(゚Д゚)w------------------------}\)
看到这数据,就觉得暴力无疑。
\(三种情况\)
\(Ⅰ.当x=0,也就是只有中间部分,答案就是出现次数最多的那个数字。\)
\(Ⅱ.当y=0,也就是只有两边的部分,那就要枚举前半部分区间和后半部分区间,设区间为[1,L]和[R,n]\)
\(再枚举a的取值(1-26),答案是区间[1,L]a出现次数和[R,n]a出现次数的较小值\)。
\(Ⅲ.当x和y都不为0,怎么办?其实和2差不多,只不过现在因为y的存在,在区间[L,R]要计算最大的y,也就是出现次数最多的。\)
具体实现,需要维护几个数组降低复杂度,具体看代码。
\(但是上面的方法对于这题的hard版本n=2e5实在不够看,所以有了下面的方法。\)
\(\color{Orange}{---------------------O(∩_∩)O分割分割分割------------------------}\)
这种数据,枚举区间的办法是行不通了,只有\(a[i]<=200\&\&a[i]>=1\)这个范围还算友好
我们可以枚举数字作为a。
比如3出现了5次,可行的枚举就是左右各一次,左右各两次。
在这个基础上,要使空出来的区间最大(因为可能要放b),显然应该选最左边的几个和最右边的几个。
\(那我们开个vector装每个数字出现的位置,枚举就是了。\)
\(那空出来的区间呢?如何快速知道哪个数在区间次数最多作为b?\)
\(其实在枚举的过程中,空出来的区间总是连续减少的,所以可以动态维护1-200的出现次数\)
#include <bits/stdc++.h>
using namespace std;
const int maxn=2e5+9;
vector<int>vec[209];
int a[maxn],t,n,vis[201];
int main()
{
cin>>t;
while(t--)
{
for(int i=1;i<=200;i++) vec[i].clear();
cin>>n;
int ans=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
vec[a[i]].push_back(i);
}
//处理x为0
for(int i=1;i<=200;i++)
{
int tt=vec[i].size();
ans=max(ans,tt);
}
//处理两头夹中间
for(int i=1;i<=200;i++)
{
int k=vec[i].size(),temp=0;
if(k<2) continue;
memset(vis,0,sizeof(vis));
int l=vec[i][0]+1,r=vec[i][k-1]-1;
for(int j=l;j<=r;j++) vis[a[j]]++;//预处理拿1个的时候
for(int j=1;j<=200;j++) temp=max(temp,vis[a[j]]);
ans=max(ans,2+temp);
for(int j=2;j<=k/2;j++)//左边拿j,右边拿j
{
int l=vec[i][j-1]+1,r=vec[i][k-j]-1;
for(int q=vec[i][j-2]+1;q<l;q++) vis[a[q]]--;
for(int q=r+1;q<=vec[i][k-j+1]-1;q++) vis[a[q]]--;
temp=0;
for(int q=1;q<=200;q++)
ans=max(ans,vis[q]+j*2);
}
}
cout<<ans<<endl;
}
}
Three Blocks Palindrome (easy version)[暴力-预处理]的更多相关文章
- Codeforces Global Round 7 D1. Prefix-Suffix Palindrome (Easy version)(字符串)
题意: 取一字符串不相交的前缀和后缀(可为空)构成最长回文串. 思路: 先从两边取对称的前后缀,之后再取余下字符串较长的回文前缀或后缀. #include <bits/stdc++.h> ...
- Into Blocks (easy version)
G1 - Into Blocks (easy version) 参考:Codeforces Round #584 - Dasha Code Championship - Elimination Rou ...
- Codeforces Round #540 (Div. 3) F1. Tree Cutting (Easy Version) 【DFS】
任意门:http://codeforces.com/contest/1118/problem/F1 F1. Tree Cutting (Easy Version) time limit per tes ...
- Codeforces Round #521 (Div. 3) F1. Pictures with Kittens (easy version)
F1. Pictures with Kittens (easy version) 题目链接:https://codeforces.com/contest/1077/problem/F1 题意: 给出n ...
- CF1225B1 TV Subscriptions (Easy Version)
CF1225B1 TV Subscriptions (Easy Version) 洛谷评测传送门 题目描述 The only difference between easy and hard vers ...
- D1. Kirk and a Binary String (easy version)
D1. Kirk and a Binary String (easy version) 01串找最长不降子序列 给定字符串s,要求生成一个等长字符串t,使得任意l到r位置的最长不降子序列长度一致 从后 ...
- Numerical Sequence (easy version)
http://codeforces.com/problemset/problem/1216/E1 E1. Numerical Sequence (easy version) time limit pe ...
- Ping-Pong (Easy Version)(DFS)
B. Ping-Pong (Easy Version) time limit per test 2 seconds memory limit per test 256 megabytes input ...
- ZOJ 3868 - Earthstone: Easy Version
3868 - Earthstone: Easy Version Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld ...
随机推荐
- Chrome浏览器架构
通用浏览器架构 它可以是一个具有许多不同线程的进程,也可以是具有几个通过IPC进行通信的多个线程的进程. 一个具有许多不同线程的进程 通过IPC进行通信的多个线程的进程 注意 这些不同的体系结构是实现 ...
- floyd三重循环最外层为什么一定是K
Floyd算法为什么把k放在最外层? - 知乎 https://www.zhihu.com/question/30955032高票答案: 简单地总结一下:K没放在最外面一定是错的,但是在某些数据比较水 ...
- Codeup 25609 Problem I 习题5-10 分数序列求和
题目描述 有如下分数序列 2/1,3/2,5/3,8/5,13/8,21/13 - 求出次数列的前20项之和. 请将结果的数据类型定义为double类型. 输入 无 输出 小数点后保留6位小数,末尾输 ...
- Daily Scrum 12/23/2015
Process: Zhaoyang: Compile the Caffe IOS version and make it run in the IOS9. Yandong: Finish the Az ...
- Co-prime 杭电4135
Given a number N, you are asked to count the number of integers between A and B inclusive which are ...
- [转载]深度理解Session
什么是session session的官方定义是:Session:在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息. 说白了session就是 ...
- CTFHub web技能树之RCE初步 命令注入+过滤cat
在一个大佬的突然丢了个题过来,于是去玩了玩rce的两道题 大佬的博客跳转链接在此->>>大佬召唤机 叫 命令注入 一上来就是源码出现,上面有个ping的地方 <?php $re ...
- [Abp vNext 入坑分享] - 3.简单的用户模块功能开发
一.简要说明 本篇文章开始进行业务模块的开发模拟,借助user模块来进行业务开发,主要是用户相关的基础操作.主要是先使用Users来体验整个开发的流程.主要是先把一个基础流程跑顺利,在这里我并不会过于 ...
- The new SFCB broker fails to start with a SSL-related error: Failure setting ECDH curve name (secp22
# openssl ecparam -list_curves secp384r1 : NIST/SECG curve over a 384 bit prime field secp521r1 : NI ...
- Android | 教你如何使用HwCameraKit接入相机人像模式
目录 介绍 简介 关于本次CodeLab 你将建立什么 你会学到什么 你需要什么 申请Camera相关权限 集成HwCameraKit开放能力 步骤1 模式创建:获取CameraKit实例,创建人像模 ...