A 模拟,C 是倍增/LCA/树上差分板子,之后回来看发现 B 是二分,全写了。D 贪心,用线段树优化,写完又调一共一个小时。
最后 A 过了,B 由于避开精度问题乘了分母导致需要开 __int128,但是在乘法上没有强转导致溢出,挂了 30;C 把 i 手误敲成 y 过样例所以爆零了;D 由于需要严格次大值,但写成了次大值挂了 10 分。赛后杰哥讲了 E 感觉也能做。
题解
A. 训练士兵
枚举 i\in[1,1e6] 表示每个人的第 i 次训练,若第 i 次不花费 S 组团训练,而是分别单独训练,代价会变成 \sum_{k=1}^n[c_k\ge i]p_k,所以预处理 t_i 表示 \sum_{k=1}^n[c_k=i]p_i。初始令 now 为所有 p_i 的和,每处理完第 i 次就减去 t_i,直到 now<S 时退出,此时的 i-1 便为最终组团训练的次数,最终计算即可。