zoukankan      html  css  js  c++  java
  • Google Code Jam 2020 Round1B Join the Ranks

    题意

    给你一个形如(1,2,cdots,R,1,2,cdots,R,1cdots)的序列,共重复(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)的取值范围比较小,直接模拟就完事了。

  • 相关阅读:
    jquery load 方法回显数据
    jquery动态添加表单数据
    表单对象属性disabled和readOnly
    jQuery 对象和 DOM 对象
    jQuery 回调函数
    JQuery与JavaScript onload的区别
    BigDecimal类型数据保留两位小数即百分比运算
    一次SQL查询语句的优化
    富文本编辑器的保存操作注意事项
    poi 技术动态更新 Excel模板内容,动态更新内容
  • 原文地址:https://www.cnblogs.com/zengzk/p/12738110.html
Copyright © 2011-2022 走看看