zoukankan      html  css  js  c++  java
  • Codeforces 1508A Binary Literature

    考虑着重关注两个 (0/1) 字符串 (s_1, s_2),构造一个 (S) 同时含有 (s_1, s_2) 作为子序列,那么 (|S|) 至少应该是多少呢?

    答案显然是 (|s_1| + |s_2| - |operatorname{LCS}(s_1, s_2)|)

    但是通常求 (operatorname{LCS})(O(n^2)) 的 DP,这里显然行不通,但考虑到这里是 (0/1) 字符串,而且并不是一定要最小化长度,只要满足一定限制即可,所以有没有改进方法呢?

    对于任意长度为 (2n)(0/1) 字符串 (s),其中必然有至少 (n)(0) 或者至少 (n)(1)

    这个结论的正确性是非常显然的,它的另一种表述形式是,每个 (s_i) 要么含有 (t_1 = smallegin{matrix} n \ overbrace{00cdots 0}end{matrix}) 要么含有 (t_2 = smallegin{matrix} n \ overbrace{11cdots 1}end{matrix})

    而本题中又给定了 (3) 个字符串,所以必然有两个字符串所含的 (t) 是相同的。

    于是必然可以构造出一种 (2n+2n - n = 3n) 的合法方案。

    构造过程中,只要把 (s_1, s_2) 中对应的字符插到 (t) 的对应位置中即可。

  • 相关阅读:
    c++ 中bool 的默认值
    cocos2d CCLOG格式符号表
    c++数组指针bug
    cocos2d-x-2.2.6创建工程
    Nape实现坐标旋转角度回弹
    haxe 中使用音效
    haxe 嵌入swf 读取里面的内容
    haxe 配置
    Spring Tool Suite(STS)基本安装配置
    git提交忽略文件.gitignore内容
  • 原文地址:https://www.cnblogs.com/syksykCCC/p/CF1508A.html
Copyright © 2011-2022 走看看