atcoder 总结帖
由于我太菜了,只能写前 6 题....
\(\Huge\texttt{abc234}\)
C
题意:一串由 \(0, 2\) 组成的整数序列,求第 k 小的数是谁 (\(k \leq 10^{17}\))
思路:把 k 转化成 2 进制,如果这一位为 1 就输出 1 ,为 0 就是 0 .
D
题意:给定一个 \(1\sim n\) 的排列 \(P (p_1,p_2,p_3...,p_n)\),对于每个 \(i = k,k+1,...n\),求出序列 P 前 i 个数第 k 大的数是几。
思路:
先求出前 k 个数第 k 大的数。记 \(tmp\) 为上一次的第 k 大。然后依次枚举 k+1 到 n ,如果当前的数小于tmp,就输出 tmp 。如果大于 tmp,就在当前这个数的前面(包括这个数)找到第一个大于 tmp 的数,输出即可。
别问我怎么知道这样做就可以 AC,我也是找规律找出来的,因为每次只比原来多一个数。
E
题意:如果一个数相邻两项差都相同,称这个数为完美数,求出大于 x 的第一个完美数。
思路
考虑暴力打表,第一层枚举位数,第二层枚举最开头的数值,第三层就枚举次开头的数值。代码
F
题意:给定一个字符串 S。作为 S 的非空、不一定连续的子序列的排列,可以获得多少个不同的字符串?
思路:
可以作为 S 的非空连续子序列 S' 的排列获得的不同字符串的数量仅取决于每个字母在 S' 中的出现次数。
定义 \(dp_{i,j}\) 表示前 i 个字母用了 j 个字符的方案数。
那么 \(dp_{i,j} = ∑_{k=0}^{\min(j,freq_i)}{dp_{i-1,j-k}\times C_j^k}\)

浙公网安备 33010602011771号