做题记录 25.7.28

[2025“钉耙编程”中国大学生算法设计暑期联赛(4) 1001] 电子带负电

\(a\)\(0\) 时,显然答案为 \(\frac{n(n+1)}2(n+1)(n+1)\)

否则由于 \(a\ge 0\),最大子段和需要选择 \(a\) 中所有 \(>0\) 的位置,\(l\) 上界为 \(a\) 中第一个 \(>0\) 的位置,\(r\) 下界为 \(a\) 中最后一个 \(>0\) 的位置,\(L\) 上界为 \(a\) 中除 \(0\) 外的最小值,\(R\) 下界为 \(a\) 中最大值,答案为 \(l_{\max}(n-r_{\min}-1)(L_{\max}+n+1)(n-R_{\min}+1)\)

时间复杂度 \(O(\sum n)\)

代码

[2025“钉耙编程”中国大学生算法设计暑期联赛(4) 1009] 量子弹弓

存在 \(0\) 时显然不行

\(>1\)\(p\) 的集合为 \(S\)\(c\)\(=1\)\(p\) 的数量

\(S\) 中取出一个数,设为 \(l\),则将不超过 \(l-1\)\(1\) 和一个 \(l\) 依次拼起来后可视为一个 \(1\)

重复直到 \(S\) 为空或 \(c=0\)

若最终 \(c>2\) 则无解,否则有解(剩余的拼为菊花状)

可证上述要求等价于 \(\sum p_i\ge 2n-2\)

时间复杂度 \(O(\sum n)\)

代码

[2025“钉耙编程”中国大学生算法设计暑期联赛(4) 1008] 回忆与展望

假设最终划分为 \(k\) 个不降段,显然 \(z\) 的系数为 \(k-1\)

先在相邻不降段之间插入一个 \(0\),最后删除,这样所有不降段前一个位置都是 \(0\)

对于数 \(v\),设出现次数为 \(cnt_v\),最优方案为尽量分到 \(k\) 个段中,\(cnt_v<k\) 时有 \(cnt_v\) 个段分别分一个,贡献为 \(cnt_vx\),否则 \(k-1\) 个段分一个,一个段分 \(cnt_v-k+1\) 个,贡献为 \((k-1)x+(cnt_v-k)y\),即一个 \(cnt_v\) 的贡献为 \(\min(cnt_v,k-1)x+\max(0,cnt_v-k)y\)

然后考虑 \(0\) 的影响,发现每个加上的 \(0\) 额外产生 \(x\) 的贡献,因此需要减去 \((k-1)x\)

综上,\(k\) 的答案为 \((k-1)z+\sum_v (\min(cnt_v,k-1)x+\max(0,cnt_v-k)y)-(k-1)(z-x)=x(\sum_v \min(cnt_v,k-1)-k+1)+y\sum_v\max(0,cnt_v-k)+z(k-1)\)\(x,y,z\) 的系数之和为 \(n\)\(z\) 的系数已知,因此考虑如何对于每个 \(k\) 求出 \(\sum_v\max(0,cnt_v-k)\),令 \(c_{k+1}\) 为取 \(k\) 时的答案,则一个 \(cnt_v\) 会令 \(c_{1\sim cnt_v}\) 依次加上 \(cnt_v,cnt_v-1,\cdots,1\),前缀和优化即可

时间复杂度 \(O(\sum n)\)

代码

posted @ 2025-07-29 14:35  Hstry  阅读(23)  评论(0)    收藏  举报