可以区间dp,但是复杂度太高。

所以应该是贪心,怎么贪心呢?

这种题目,最好还是手玩找一些规律。

可以发现,由于保证可以m次填完,所以颜色之间没有相互包含关系。

比较像分治的模型。

所以考虑拿到一个区间怎么处理。

假设a[l]==a[r],那么为了合法,一定先刷这种颜色。然后分部分递归下去。

否则,对于区间:AEEGEABBBCDDC

里面的夹心肯定不能先处理了,可以大概看做:A..AB..BC..C

先刷哪一个?

刷两边长度较小的一个

证明:

如果刷中间,那么中间的位置之后就不能再动了。如果刷比较长的一个,那么之后不能再动。

如果刷比较短的一个,长的可以再多刷几次,贡献更大。

比较即可。(如果两边长度相同,比较下一个。)

O(m^2+n)

理论上可以后缀数组优化到:O(mlogn+n)

#include<bits/stdc++.h>
#define reg register int
#define il inline
#define numb (ch^'0')
using namespace std;
typedef long long ll;
il void rd(int &x){
char ch;x=;bool fl=false;
while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);
(fl==true)&&(x=-x);
}
namespace Miracle{
const int N=1e5;
const int M=;
int st[M],nd[M];
ll ans;
int a[N];
int n,m;
vector<int>mem[M];
void sol(int l,int r){
//cout<<" sol "<<l<<" "<<r<<" "<<ans<<endl;
if(l>r) return;
if(l==r){
++ans;return;
}
if(a[l]==a[r]){
ans+=r-l+;
int las=l;
for(reg i=;i<mem[a[l]].size();++i){
sol(las+,mem[a[l]][i]-);
las=mem[a[l]][i];
}
}
else{
int L=l,R=r;
int go=;
ans+=r-l+;
while(!go){
if(nd[a[L]]-st[a[L]]+<nd[a[R]]-st[a[R]]+){
go=l;break;
}else if(nd[a[L]]-st[a[L]]+>nd[a[R]]-st[a[R]]+){
go=r;break;
}
L=nd[a[L]]+;R=st[a[R]]-;
if(L>R) go=l;
}
if(go==l){
int las=l;
for(reg i=;i<mem[a[l]].size();++i){
sol(las+,mem[a[l]][i]-);
las=mem[a[l]][i];
}
sol(las+,r);
}else{
int las=st[a[r]];
for(reg i=;i<mem[a[r]].size();++i){
sol(las+,mem[a[r]][i]-);
las=mem[a[r]][i];
}
sol(l,st[a[r]]-);
}
}
}
int main(){
rd(n);rd(m);
for(reg i=;i<=n;++i){
rd(a[i]);
if(st[a[i]]==) st[a[i]]=i;
nd[a[i]]=i;
mem[a[i]].push_back(i);
}
sol(,n);
printf("%lld",ans);
return ;
} }
signed main(){
Miracle::main();
return ;
} /*
Author: *Miracle*
Date: 2018/12/25 15:04:11
*/

总结:

没有想到的原因是,还是没有从手玩找规律这个方向入手。

对于一些没有什么思路的题,可以尝试“不完全归纳”

其实规律还是比较简单的。

12.25模拟赛T1的更多相关文章

  1. light题目讲解 7.25模拟赛T1

    心得:这一道题其实就是自己打暴力打出来的 没有想到正解真的就是暴力枚举 我的做法是这样的 就是枚举A字符串中长度为x的子串 看它是不是B串的子序列 接下来是我的绝望考试代码(100分AC) //lig ...

  2. 2019.2.25 模拟赛T1【集训队作业2018】小Z的礼物

    T1: [集训队作业2018]小Z的礼物 我们发现我们要求的是覆盖所有集合里的元素的期望时间. 设\(t_{i,j}\)表示第一次覆盖第i行第j列的格子的时间,我们要求的是\(max\{ALL\}\) ...

  3. 12.25模拟赛T3

    可以发现,答案O(根号)(因为链上答案最大,n/2,n/3...根号种) 每次求答案要二分 优秀的做法是: 对于小于根号n的暴力nlogn找,可能二分到同一个mid,记忆化一下最小的tot值 对于大于 ...

  4. 12.25模拟赛T2

    https://www.luogu.org/blog/a23333/post-xing-xuan-mu-ni-sai-path-ji-wang-zui-duan-lu 如果设f[i]表示从i到n的期望 ...

  5. 【2019.8.12 慈溪模拟赛 T1】钥匙(key)(暴力DP)

    暴力\(DP\) 这题做法很多,有\(O(n^2)\)的,有\(O(n^2logn)\)的,还有徐教练的\(O(nlogn)\)的,甚至还有\(bzt\)的二分+线段树优化建图的费用流. 我懒了点,反 ...

  6. 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解

    今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...

  7. 20180610模拟赛T1——脱离地牢

    Description 在一个神秘的国度里,年轻的王子Paris与美丽的公主Helen在一起过着幸福的生活.他们都随身带有一块带磁性的阴阳魔法石,身居地狱的魔王Satan早就想着得到这两块石头了,只要 ...

  8. 【2019.7.25 NOIP模拟赛 T1】变换(change)(思维+大分类讨论)

    几个性质 我们通过推式子可以发现: \[B⇒AC⇒AAB⇒AAAC⇒C\] \[C⇒AB⇒AAC⇒AAAB⇒B\] 也就是说: 性质一: \(B,C\)可以相互转换. 则我们再次推式子可以发现: \[ ...

  9. NOIP欢乐模拟赛 T1 解题报告

    小澳的方阵 (matrix.cpp/c/pas) [题目描述] 小澳最近迷上了考古,他发现秦始皇的兵马俑布局十分有特点,热爱钻研的小澳打算在电脑上还原这个伟大的布局. 他努力钻研,发现秦始皇布置兵马俑 ...

随机推荐

  1. hadoop生态搭建(3节点)-05.mysql配置_单节点

    # ==================================================================node1 # ======================== ...

  2. 廖老师的Python教程——Python简介

    一直想了解下Python,今儿在外面办事排队的时候,打开了廖老师的官网,找到了Python教程.虽然只是一篇关于Python的简介,但是通过将Python的特性与C进行对比,很生动地归纳了Python ...

  3. [BZOJ1040][ZJOI2008]骑士(树形DP)

    对于一个联通块内,有且只有一个环,即n个点n条边 那么找到那个环,然后任意断一条边,这个联通块就变成一棵树了,然后做树形DP就行了 对于断的边要记录下来DP时特判 Code #include < ...

  4. python2.7练习小例子(十三)

        13):题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5.     程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成.(1)如果这个质数恰等于 ...

  5. BFS 队列

    Plague Inc. is a famous game, which player develop virus to ruin the world. JSZKC wants to model thi ...

  6. onenet基础通信套件返回+CIS ERROR: 50的问题解决

    1. 场景分析,主要问题就是有些操作返回+CIS ERROR: 50 2. 看了一下在AT+MIPLOBSERVERSP这个指令里面是没有返回+CIS ERROR: 50的错误类型的,所以应该是在解析 ...

  7. 添加用户-查看用户列表-禁止默认root登陆

    程序小屌丝狒狒: (Q971751392) linux添加用户 adduser feifei passwd [用户名] 设置密码 可以查看所有用户的列表 cat /etc/passwd  w 可以查看 ...

  8. 发布npm包 登录报错 E409 Conflict

    1.到官网注册个账号,并且验证完邮箱:https://www.npmjs.com/ 2.打开cmd命令行 登录:$npm login 根据提示 一步步完成登录. 3.新建一个项目文件夹: npmtes ...

  9. 基于阿里云服务器Linux系统部署JavaWeb项目

    前段时间刚完成一个JavaWeb项目,想着怎么部署到服务器上,边学边做,花了点时间终于成功部署了,这里总结记录一下过程中所遇到的问题及解决方法.之所以选择阿里云,考虑到它是使用用户最多也是最广泛的云服 ...

  10. K8s集群内热改代码

    1.登录到k8s master服务器 $ ssh developer@XXX.XXX.X.XXX(IP地址) 2.查看服务容器所在的节点(以xx-server为例) $ kubectl get pod ...