就是我这个菜鸡,赛时写出了 E2 的做法,但是算错复杂度,导致以为自己的做法只能AC E1,就没交到 E2 上,然后赛后秒A.....

题意

定义一种字串为形如:\([\underbrace{a, a, \dots, a}_{x}, \underbrace{b, b, \dots, b}_{y}, \underbrace{a, a, \dots, a}_{x}]\)

问你在给定的字串中,符合这种要求的最大子序列(可以不连续)的长度

给出数列长度 \(n\le 2\cdot 10^5\),数列中每个数 \(a_i\le 200\)


考虑暴力枚举 \(a\),然后对于每一个 \(a\),枚举 \(x\),也就是两边的 \(a\) 的 个数

用两个 vector,分别记录从前和从后数,第 \(x\) 个 \(a\) 的位置

然后一直枚举到第 \(\lfloor\dfrac{\text{a出现的次数}}{2}\rfloor\) 个

此时,再暴力枚举 \(b\),记录一个前缀和 \(sum_{b,i}\),表示 \(b\) 这个数,在前 \(i\) 位中出现的次数

假设在 vector 中记录的整数第 \(x\) 个 \(a\) 的位置是 \(pos1\),倒数第 \(x\) 个位置是 \(pos2\),那么中间 \(b\) 的个数就是 \(sum_{b,pos2}-sum_{b,pos1-1}\)

然后给所有枚举到的 \(b\) 取一个 \(\max\) 就行

注意在 \(pos1,pos2\) 中,要分别先 push_back 一个 \(0\) 和 \(n+1\),意思是正数倒数第 \(0\) 第出现的位置,同时方便后面的枚举

每枚举一个 \(a\),设它出现的次数为 \(num_a\),则它的复杂度为 \(200\times num_a\)

那么总复杂度是 \(\sum_{i=1}^{200}num_a\times 200=200\times n\)

赛时没想到这点导致并没有交 E2 qaq

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<map>
#include<iomanip>
#include<vector>
#include<cstring>
#define reg register
#define EN std::puts("")
#define LL long long
inline int read(){
register int x=0;register int y=1;
register char c=std::getchar();
while(c<'0'||c>'9'){if(c=='-') y=0;c=std::getchar();}
while(c>='0'&&c<='9'){x=x*10+(c^48);c=std::getchar();}
return y?x:-x;
}
int sum[206][200006];
std::vector<int>pos1[206],pos2[206];
int num[206];
int a[200006];
int main(){int T=read();while(T--){
// std::printf("%lld",sizeof sum+sizeof pos1+sizeof pos2+sizeof a);
int n=read();
for(reg int i=1;i<=200;i++){
pos1[i].clear();pos2[i].clear();
pos1[i].push_back(0);pos2[i].push_back(n+1);
}
for(reg int x,i=1;i<=n;i++){
for(x=1;x<=200;x++) sum[x][i]=sum[x][i-1];
a[i]=read();sum[a[i]][i]++;
num[a[i]]++;pos1[a[i]].push_back(i);
}
for(reg int i=n;i;i--) pos2[a[i]].push_back(i);
reg int ans=0;
for(reg int a=1;a<=200;a++){
for(reg int x=0;x<=num[a]>>1;x++){
for(reg int b=1;b<=200;b++)
ans=std::max(ans,(x<<1)+sum[b][pos2[a][x]-1]-sum[b][pos1[a][x]]);
}
}
std::printf("%d\n",ans);
std::memset(num,0,sizeof num);
for(reg int x,i=1;i<=n;i++){
for(x=1;x<=200;x++) sum[x][i]=0;
}
}
return 0;
}

CF1335E Three Blocks Palindrome的更多相关文章

  1. Three Blocks Palindrome (easy version)[暴力-预处理]

    给定一个数组,找出最长的子序列,满足 a,a,..a,b,b,..b,a,a,..a 前面的a和后面的a都要是x个,中间的b是y个. 其中,x>=0且y>=0. \(\color{Red} ...

  2. Codeforces Round #634 (Div. 3)

    D题想复杂了,花了好多时间,感觉也没时间看F了,就来写个题解蹭蹭访问量把^_^ 传送门:1335 A. Candies and Two Sisters 题意:你要把n个糖果分给两个人,两个人的糖果数不 ...

  3. HDU 4618 Palindrome Sub-Array (2013多校2 1008 暴力)

    Palindrome Sub-Array Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Oth ...

  4. HDU 4618 Palindrome Sub-Array 暴力

    Palindrome Sub-Array 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4618 Description A palindrome s ...

  5. Joining Byte Blocks(哈希+带花树)

    题目链接 Problem Statement As you are probably aware, the Internet protocols specify a canonical byte or ...

  6. 从Script到Code Blocks、Code Behind到MVC、MVP、MVVM

    刚过去的周五(3-14)例行地主持了技术会议,主题正好是<UI层的设计模式——从Script.Code Behind到MVC.MVP.MVVM>,是前一天晚上才定的,中午花了半小时准备了下 ...

  7. PALIN - The Next Palindrome 对称的数

    A positive integer is called a palindrome if its representation in the decimal system is the same wh ...

  8. [LeetCode] Longest Palindrome 最长回文串

    Given a string which consists of lowercase or uppercase letters, find the length of the longest pali ...

  9. [LeetCode] Palindrome Pairs 回文对

    Given a list of unique words. Find all pairs of distinct indices (i, j) in the given list, so that t ...

随机推荐

  1. Flask 入门(特别篇)

    作为一款优秀的编辑器,pycharm得到了很多人的支持,但是刚接触它的小伙伴会遇到一个困难,如何把一个别人做的python项目导入到pycharm里面呢? 1.手动建立一个虚拟环境,注意这个环境和你导 ...

  2. Flask 入门(八)

    flask操作数据库:操作数据: 承接上文: 修改main.py中的代码如下: #encoding:utf-8 from flask_sqlalchemy import SQLAlchemy from ...

  3. web 应用 为啥 需要用到 tomcat 之类的 部署

    首先了解C/s架构 比如我们常见的QQ,魔兽世界等 这种结构的程序是有服务器来提供服务的,客户端来使用服务 而B/S架构是这样的 它不需要安装客户端,只需要浏览器就可以了 例如QQ农场,这样对客户端的 ...

  4. 关于在React中 报Super expression must either be null or a function, not undefined (采坑系列)

    今天突然在联系React中遇到一开始就报    Super expression must either be null or a function, not undefined 百度,各种方法,.. ...

  5. HashMap实现原理(JDK1.8)

    概述HashMap在底层数据结构上采用了数组+链表+红黑树,通过散列映射来存储键值对数据因为在查询上使用散列码(通过键生成一个数字作为数组下标,这个数字就是hash code)所以在查询上的访问速度比 ...

  6. 数组的增加与删除(push、pop、unshift、shift)

    1.    数组增删和换位置(原数组将被修改) push()  //在数组最后面插入项,返回数组的长度 数组1改后的长度  =  数组1.push(元素1); pop()    //取出数组中的最后一 ...

  7. 2019-05-12 Python之模拟体育竞赛

    一.简介 可以选择任意规则,模拟不同的两个队伍进行球赛的模拟比赛 二.源代码 函数介绍: from random import * #输出介绍信息 def printIntro(): print(&q ...

  8. Extjs——简单的Grid panel小实例

    <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...

  9. JSON Extractor(JSON提取器)

    JSON提取器 Variable names(名称):提取器的名称Apply to(应用范围):Main sample and sub-samples:应用于主sample及子sampleMain s ...

  10. 微信小程序 —搜索框

    wxSearch优雅的微信小程序搜索框 一.功能 支持自定义热门key 支持搜索历史 支持搜索建议 支持搜索历史(记录)缓存 二.使用 1.将wxSearch文件夹整个拷贝到根目录下 2.引入 // ...