12.25模拟赛T1



可以区间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的更多相关文章
- light题目讲解 7.25模拟赛T1
心得:这一道题其实就是自己打暴力打出来的 没有想到正解真的就是暴力枚举 我的做法是这样的 就是枚举A字符串中长度为x的子串 看它是不是B串的子序列 接下来是我的绝望考试代码(100分AC) //lig ...
- 2019.2.25 模拟赛T1【集训队作业2018】小Z的礼物
T1: [集训队作业2018]小Z的礼物 我们发现我们要求的是覆盖所有集合里的元素的期望时间. 设\(t_{i,j}\)表示第一次覆盖第i行第j列的格子的时间,我们要求的是\(max\{ALL\}\) ...
- 12.25模拟赛T3
可以发现,答案O(根号)(因为链上答案最大,n/2,n/3...根号种) 每次求答案要二分 优秀的做法是: 对于小于根号n的暴力nlogn找,可能二分到同一个mid,记忆化一下最小的tot值 对于大于 ...
- 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的期望 ...
- 【2019.8.12 慈溪模拟赛 T1】钥匙(key)(暴力DP)
暴力\(DP\) 这题做法很多,有\(O(n^2)\)的,有\(O(n^2logn)\)的,还有徐教练的\(O(nlogn)\)的,甚至还有\(bzt\)的二分+线段树优化建图的费用流. 我懒了点,反 ...
- 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解
今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...
- 20180610模拟赛T1——脱离地牢
Description 在一个神秘的国度里,年轻的王子Paris与美丽的公主Helen在一起过着幸福的生活.他们都随身带有一块带磁性的阴阳魔法石,身居地狱的魔王Satan早就想着得到这两块石头了,只要 ...
- 【2019.7.25 NOIP模拟赛 T1】变换(change)(思维+大分类讨论)
几个性质 我们通过推式子可以发现: \[B⇒AC⇒AAB⇒AAAC⇒C\] \[C⇒AB⇒AAC⇒AAAB⇒B\] 也就是说: 性质一: \(B,C\)可以相互转换. 则我们再次推式子可以发现: \[ ...
- NOIP欢乐模拟赛 T1 解题报告
小澳的方阵 (matrix.cpp/c/pas) [题目描述] 小澳最近迷上了考古,他发现秦始皇的兵马俑布局十分有特点,热爱钻研的小澳打算在电脑上还原这个伟大的布局. 他努力钻研,发现秦始皇布置兵马俑 ...
随机推荐
- PHP-入门指引1
PHP("PHP: Hypertext Preprocessor",超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML中,尤其适合 web ...
- python -pickle模块、re模块学习
pickel模块 import pickle #pickle可以将任何数据类型序列化,json只能列表字典字符串数字等简单的数据类型,复杂的不可以 #但是pickle只能在python中使用,json ...
- linux io 学习笔记(03)---共享内存,信号灯,消息队列
system V IPC 1)消息队列 2)共享内存 3)信号灯(信号量集) 1.消息队列. ipcs -q 查看系统中使用消息队列的情况 ipcrm -q +msqid 删除消息队列 消息队列工作原 ...
- 汇编实验15:安装新的int 9中断例程
汇编实验15:安装新的int 9中断例程 任务 安装一个新的int 9中断例程,功能:在DOS下,按下“A”键后,除非不在松开,一旦松开后,就显示满屏幕的“A”,其他键照常处理. 预备知识概要 这次实 ...
- java.lang.NoClassDefFoundError 错误解决思路
Process: com.oppo.reader, PID: 20472 java.lang.NoClassDefFoundError: com.zhangyue.iReader.PDF2.ui.PD ...
- Hbase表格设计
Rowkey设计 Region: 基于RowKey的分区,可理解成MySQL的水平切分. 每个Region Server就是Hadoop集群中一台机器上的一个进程. 比如我们的有1-300号的RowK ...
- Linux使用imagemagick的convert命令压缩图片,节省服务器空间
1,安装imagemagick yum install ImageMagick 2,获取图片 find ./ -regex '.*\(jpg\|JPG\|png\|jpeg\)' -size +500 ...
- 活动的生命周期 Android
1.运行程序 onCreate().onStart()和 onResume() 2.跳转到非弹框视图控制器 onPause()和 onStop() 返回上一个视图控制器(没被回收) onRestart ...
- 引用外部静态库(.a文件)时或打包.a时,Category方法无法调用。崩溃
我的这个是MJRefresh,学习打.a包Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: ...
- [转][赞]Android开发者必知的开发资源
英文原文:Bongzimo 翻译: ImportNew-黄小非 随着Android平台市场份额的持续猛增 ,越来越多的开发者开始投入Android应用程序的开发大潮.如果您是一位2013年刚刚入行的 ...