zoukankan      html  css  js  c++  java
  • 退役后的颓废记录(No Password)

    T2多测没清空,爆零了。

    没什么好说的,也不知道有没有机会了。

    趁着最后半天whk半天竞赛的日子再做些题吧。

    ARC110E

    挺神的一道dp题。

    这么考虑:如果一段串可以拍成一个字母,那么其实这个字母是唯一确定的。

    再进一步:可以吧$ABC$每个字母都看成二进制,两个数结合就是异或。把$ABC$分别赋值为$1,2,3$,发现如果一段的异或和不为0,那么它一定能缩成一个字母,反之则不能缩成(如果这一段前面有字母的话,可以把这一段全部干掉)。

    那么我们设$dp[i]$表示当前以$i$结尾的方案数,思考如何转移。

    转移的时候可以枚举后面那段哪些拍成哪个字母,因为统计方案会重复(考虑相同类型的两个位,它们之间的异或和是0,可以全部干掉,会重复统计),所以只更新最短的可以形成各个字母的位。(其实就是每种字母每种出现次数只更新一次)

    在统计答案时,因为保证了$dp[i]$的第$i$为一定是作为最后一位存在的,而事实上$n$不一定存在,它可以被所有异或和为0的串干掉,所以要把所有后缀异或和为0的前一位全部统计。

    注意字母全部相同的Corner Case。

  • 相关阅读:
    数数小木块
    Triangular Sums
    Financial Management
    阶乘因式分解(一)
    另一种阶乘问题
    韩信点兵
    Fibonacci数
    A+B Problem
    16进制的简单运算
    浅谈数据库之事务
  • 原文地址:https://www.cnblogs.com/Forever-666/p/14100091.html
Copyright © 2011-2022 走看看