CF2204 (Edu. R. 188) 赛后笔记

E

Statement

对于正整数 xxS(x)S(x) 通过如下过程生成:设 f(x)f(x)xx 的各位数字之和,迭代地:将 xx 附加到 S(x)S(x) 的末尾,如果 x>9x>9 则令 x:=f(x)x:=f(x) ,反之结束迭代。

给定 ss (s105)(|s| \le 10^5) ,重新排列 ss 中的数字使得存在 xx 使得 s=S(x)s=S(x) 。输出任意的重新排列后的 ss

Solution

f(x)<106f(x)<10^6 ,枚举 f(x)f(x) 即可。
submission

F

Statement

给定一个整数数组 aa 和多次询问 kik_i,每次操作可以将任意一个分数的分子加 11 或分母减 11(分母需大于 11),求数组 aa 的所有连续子数组以各项倒数(即 1al,,1ar\frac{1}{a_l}, \dots, \frac{1}{a_r})作为初始分数序列时,在恰好进行 kik_i 次操作后能得到的最大分数和的总和,结果对 998244353998244353 取模。n,m5×105n,m \le 5 \times 10^5

Solution

显然对于某个区间,一切操作都要在分母最小的数上做才更优。

那么这种有关最大最小值的区间计数类问题显然要对每一个位置求出它能产生贡献的区间,这个过程可以用单调队列 O(n)O(n) 地实现,注意为了规避相同的的数值产生区间重复要把一侧的等号去掉。

那么具体应该减分母还是加分子?结论是:优先减分母,分母减到 11 之后然后全部加到分子上。那么对于不同的 kk ,以 aia_i 为分界,贡献的计算就有了两种计算公式。kk 是升序给出就更提示我们,要用前缀和维护对于每个 kk 的答案。

submission