ABC 353 A - E
A Buildings
这是一道很难的题,我们需要用复杂的枚举方法,我们从 $ 2 $ 号开始枚举(注意理解为什么是从 $ 2 $ 号开始),然后一直找到最后,找比它大的,建议没有超过高四的同学们不要轻易尝试
B AtCoder Amusement Park
这也是一道不简单的题,我们考虑直接加,然后如果超过 $ k $,就取模,然后累加答案即可
C Sigma Problem
C 很抽象,我们考虑这么做,对于每个数考虑,在后面的数里面二分一下,找一个分割点,前面的数不需要取模,后面的数需要,保证数据范围是只取模一次,所以我们直接算就可以了,具体就是减去后面的数的数量乘上模数
注意预处理前缀和
D Another Sigma Problem
这个题就比较有意思了,首先我们考虑变形式子:
$ f(a, b) = a \times 10^{l(b)} + b $
这里 $ l(k) $ 表示 $ k $ 的位数,这个比较好求:
inline int getl (int x) {
int res = 0, k = x;
while (k) k /= 10, ++ res;
return res;
}
然后接着变形:
$ \sum_{i = 1}^{n - 1} \sum_{j = i + 1}^{n} f(a, b) = \sum_{i = 1}^{n - 1} \sum_{j = i + 1}^{n} a \times 10^{l(b)} + b $
然后我们可以把 $ 10^{l(b)} $ 和 $ b $ 求一个前缀和,然后我们就可以快速求出来了,因为不需要分别取模,这个题就变得很简单了
分别取模我也不会啊
E Yet Another Sigma Problem
这是一个很巧的题,我们先建一下字典树,然后对于每一个字符串考虑,答案就加上这个字符串匹配所有字符串得到的答案总和减去自己的长度,把所有的加起来除以二
然后考虑怎么求
首先字典树每个节点记录一下匹配的字符串的数量,然后遍历当前字符串,把记录的东西加起来即可,因为如果有一个字符串也在这个节点,就说明这个节点对公共前缀是有贡献的
然后就做完了
标签:取模,ABC,10,res,sum,然后,353,字符串 From: https://www.cnblogs.com/Tzf-tzf/p/18191113