Google Code Jam 2020 Round1B Join the Ranks
2024-08-31 05:05:46
题意
给你一个形如\(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\)的取值范围比较小,直接模拟就完事了。
最新文章
- Zabbix Trapper items
- Sql Server函数全解<;三>;数据类型转换函数和文本图像函数
- Eclipse的常用快捷键、旁门左道、系统错误小贴士
- python笔记 - day7
- Java: 基类、子类、构造函数、程序块的初始化顺序
- JavaScript网站设计实践(七)编写最后一个页面 改进表单
- 「30天自制操作系统」 Stop &; 「OS67 」 Start
- python zip文件密码爆破
- 湖南多校对抗赛(2015.05.03)Problem A: Twenty-four point
- Linux下mysql远程连接问题
- 个人作业2——英语学习APP的案例分析
- redis-string操作
- 学习 Spring (二) Spring 注入
- linux系统 之 curl命令
- jQuery插件slider实现图片轮播
- Modularizing your graphQL schemas
- 【java_需阅读】Java中static关键字用法总结
- Linux内核第一节
- MD5加密算法中的加盐值 ,和彩虹表攻击 防止彩虹表撞库
- mysql处理varchar类型的between和and的时间问题少一天解决;