题意

给你一个形如\(1,2,\cdots,R,1,2,\cdots,R,1\cdots\)的序列,共重复\(C\)次。你每次可以选择一个区间\([L,R]\)将其平移到序列首部,最终使得序列具有\([1,1,\cdots,1,2,2,\cdots,2,\cdots,R,R,\cdots,R]\)的形式。问最少需要多少次,并输出具体步骤。

解题思路

比赛的时候只来得及写前两道,这道题是赛后看dls录播后补的。啥都不说了,dlstxdy!

对于相邻且相同的元素,我们就把他合并成\(1\)个元素,要求的序列形式就变为\([1,2,\cdots,R]\)。

对于一个序列,把他的一段区间平移到序列的首部,很容易可以证出最多删掉两个元素。

比如对于\([[1,2],[3,1],2,3,1,2,3]\),我们可以把第一个\([3,1]\)移到序列首部,得到\([3,1,1,2,2,3,1,2,3]\),合并相邻且相同的元素后是\([[3,1],[2,3],1,2,3]\),然后再把第一个\([2,3]\)移动到序列首部,得到\([2,3,3,1,1,2,3]\),合并后是\([[2,3],[1,2],3]\),然后再把第一个\([1,2]\)移动到序列首部,得到\([1,2,3]\)。

如果我们每次都删掉两个元素,那么使用的次数肯定是最少的。但是还有一种特殊情况,比如\(R=5,C=2\)的时候按上述方法缩到最后会得到\([5,1,2,3,4,5]\)的序列。这种情况下就把\([1,2,3,4,5]\)移动到序列首部,然后就可以得到\([1,2,3,4,5]\),这样子也肯定是最优的。

然后因为\(R,C\)的取值范围比较小,直接模拟就完事了。

最新文章

  1. Zabbix Trapper items
  2. Sql Server函数全解<三>数据类型转换函数和文本图像函数
  3. Eclipse的常用快捷键、旁门左道、系统错误小贴士
  4. python笔记 - day7
  5. Java: 基类、子类、构造函数、程序块的初始化顺序
  6. JavaScript网站设计实践(七)编写最后一个页面 改进表单
  7. 「30天自制操作系统」 Stop & 「OS67 」 Start
  8. python zip文件密码爆破
  9. 湖南多校对抗赛(2015.05.03)Problem A: Twenty-four point
  10. Linux下mysql远程连接问题
  11. 个人作业2——英语学习APP的案例分析
  12. redis-string操作
  13. 学习 Spring (二) Spring 注入
  14. linux系统 之 curl命令
  15. jQuery插件slider实现图片轮播
  16. Modularizing your graphQL schemas
  17. 【java_需阅读】Java中static关键字用法总结
  18. Linux内核第一节
  19. MD5加密算法中的加盐值 ,和彩虹表攻击 防止彩虹表撞库
  20. mysql处理varchar类型的between和and的时间问题少一天解决;

热门文章

  1. mqtt第一次接触
  2. 在IntelliJ IDEA中多线程并发代码的调试方法
  3. 【av68676164(p41-p42)】内存管理功能
  4. SpringCloud系列之API网关(Gateway)服务Zuul
  5. C#开发笔记之07-如何实现交换2个变量的值而不引入中间变量?
  6. Flutter 容器(4) - Container
  7. 基于Linux系统geth的安装
  8. vue keep-alive 不生效和多级(三级以上)缓存失败
  9. HTML基础-02
  10. 通过实际案例摸清楚Spring事务传播的行为