• Codeforces Round 723 Div.2


    赛时通过 ( ext{A,B,C1,C2}),排名 (1100)

    A

    略。

    B

    首先可以发现 (1111,11111,dots) 是没用的,因为它们都可以用 (11,111) 表示出来。然后我们考虑一个数 (x) 是否能够表示成 (11a+111b=x(a,bge 0))

    有一个结论是假如 (x,yge 0land xperp y),那么所有大于 (xy-x-y) 的数都一定能被表示成 (ax+by(a,bge 0)) 的形式。

    于是对于 (>1099) 的数输出 yes,小于等于 (1099) 的数暴力判断即可。

    C

    可反悔贪心,略。

    D

    找一下规律可以发现相同的字母放在相邻的位置最优。于是枚举 (4!=24) 种排列,转化成逆序对即可。

    E

    好妙的题。

    用大写字母表示字符串,用小写字母表示字符。

    考虑在后缀数组中相邻的两个字符串 (xY)(aB)。如果有 (B<Y) 那么一定有 (x<a)。否则只需要 (xle a) 即可。

    考虑表示一下这个东西:设 (rk_x) 为后缀 (s_{xdots n}) 在后缀数组中的位置(位置从 (1) 开始),(sa_x) 为后缀数组。如果 (rk_{sa_x+1}>rk_{sa_{x+1}+1}) 则一定有 (s_{sa_{x+1}}>s_{sa_x})

    重排列 (s)(s') 使得 (s'_i=s_{sa_i})。于是问题转化成了:求有多少个 (s') 满足 (forall iin [1,n],1le s'_ile k),且对于某些特定的位置有 (s'_i>s'_{i-1}),对于其他位置有 (s'_ige s'_{i-1})

    大胆猜测那些特定的位置对答案没有影响,对答案有影响的只是它们的个数。记它们的个数是 (c)

    于是答案就是 (sumlimits_{x=1}^k dbinom{x}{c}dbinom{k-x+n-c}{n-c})

    推式子咕了,反正时间复杂度能做到 (O(n))

    Written by Alan_Zhao
  • 相关阅读:
    js数组去重五种方法
    wm_concat 多行字符串拼接
    ORACLE WITH AS 简单用法
    layui laytpl 语法
    看懂Oracle执行计划
    GIT RM -R --CACHED 去掉已经托管在GIT上的文件
    sourceTree使用教程--拉取、获取
    SourceTree忽略文件和文件夹
    layui table 详细讲解
    利用POI实现下拉框级联
  • 原文地址:https://www.cnblogs.com/alan-zhao-2007/p/cf-723-div2.html
Copyright © 2020-2023  润新知