zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    动态规划(DP计数):HDU 5117 Fluorescent
    动态规划(DP计数):HDU 5116 Everlasting L
    动态规划(区间DP):HDU 5115 Dire Wolf
    数学(扩展欧几里得算法):HDU 5114 Collision
    二叉树面试题
    linux eval命令
    关于Shell中命令替换$(...)与后置引用`...`的不同
    linux set,env和export
    linux crontab 命令
    排序
  • 原文地址:https://www.cnblogs.com/alan-zhao-2007/p/cf-723-div2.html
Copyright © 2011-2022 走看看