【补题】牛客

挑战赛 62

感冒了状态很差。T2 猜到了结论但不敢写,T3 一直调不出来

C. 莫娜与阿贝多

显然可以按等级从低到高的顺序,用完当前等级的物品后考虑下一等级,但要倒序 DP 来决定当前状态用哪种合成方式

\(f[k,i,j]\) 为有 \(i\) 个等级 \(k\) 的物品,合成了 \(j\) 个等级 \(k+1\) 物品的成功概率。初始 \(f[k,0/1/2,j]=f[k+1,a_{k+1}+j,0]\)。正序枚举 \(i\),倒序枚举 \(j\) 并按实际含义转移即可

时间复杂度 \(O(ma^{2})\)

练习赛 91

D 写了棵替罪羊树,E WA 了 \(4\) 次,导致没时间想 F、没时间写 G 了。。。

E. 游戏人生

比较基础的反悔贪心,考场上一直考虑不全,这种题还是要拍

F. 卡牌大师

\(len\)\(m\) 的位数,把数分成两组:后 \(m\) 位加起来 \(=m\) 和后 \(m\) 位加起来 \(=10^{len}+m\)(进一位),不难发现两组内的数是独立的。

只考虑后 \(len\) 位。以第一组为例,如果 \(a+b=m\),那么 \(a,b\) 一定一一对应且 \(a\in[1,\frac{m}{2}],b\in[\frac{m}{2},m]\),算出这两块分别有多少数取 \(\max\) 即可,实现上细节比较多(比如特判 \(m\) 是偶数、\(0\) 不合法但 \(10^k\) 合法、需要 __int128)。

G. 区间加

如果只有加 \(lowbit\),每个数被加 \(\log\) 次后会变成 \(2^{k}\) 的形式,之后每次加相当于是 \(\times2\)
考虑 \(highbit\),每次加会使二进制下最高的 \(1\) 左移一位,那么把每个数最高的 \(1\) 位和剩余位单独剥离,分别维护即可。

实现上可以用线段树维护最高位的值、其余位的值、最高位和最低位差了多少位,\(+highbit\) 时给最高位 \(\times2\),差值 \(+1\)\(+lowbit\) 时对其余位为 \(2^k\) 形式的区间 \(\times2\),其他位置暴力修改,差值 \(-1\)。时间复杂度 \(O(n\log n\log a)\)

代码鸽了

posted @ 2021-11-13 10:15  401rk8  阅读(58)  评论(1编辑  收藏  举报