赛时通过 ( 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))。