CF1856(Codeforces Round 890 (Div. 2))

总结

\(t1\) 看起来好简单啊,\(5min\) 切了。
\(t2\) 看起来好简单啊,\(15min\) 切了。
\(t3\) 看起来好难啊,\(50min\) 跳了。
一开始想到了二分答案,迟迟想不到 \(O(n)\)\(check\),于是思维开始发散,从贪心想到 \(dp\)
考完发现大家都是 \(O(n^2)\)\(check\),wssb。
\(t4\) 是道交互,直接跳了。
\(t5\) 看起来还行,让我做做。
\(after\ 1\ hour......\)
还是没想出来,还差一个 \(dp\) 就想出来了,但就是抓不到方程。。。
比赛结束前 \(5min\) 想到了做法,可惜大势已去。。。
只做出来两道题,太惨了。
实力太菜导致的。
(考后两分钟交了 \(t5\)\(AC\)

解析

A. Tales of a Sort

难度:红
简单题。

B. Good Arrays

难度:橙
如果不是 \(1\) 对其他数的贡献为 \(a_i-1\),是 \(1\) 贡献为 \(-1\)
最后判断贡献是否 \(<0\) 就行了。

C. To Become Max

难度:黄-绿
想着用二分,结果 \(O(n)\)\(check\),结果很久都没写出来,玉玉了。
打完才发现 \(check\) 是可以 \(O(n^2)\) 的。

D. More Wrong

难度:绿
发掘一下最大值的性质!如果最大值位置为 \(p\),则有 \(ask(l,p)=ask(l,p-1)\)
因为找不到比 \(a_p\) 更大的数了。
所以可以分治查找。复杂度 \(O(4n^2)\)

E1. PermuTree (easy version)

难度:绿
题目转化一下:在以 \(i\) 为根的树下选取若干子树分成两部分,使子树大小的和的乘积最大。
数据较小的时候直接暴力背包就行了。

E2. PermuTree (hard version)

难度:紫
我们发现,求出时间复杂度的瓶颈在于:
把儿子大小构成的数集合分成差尽可能小的两部分。
对于这里的优化,有很多做法,如 \(FFT\)\(bitset\),这里选择 \(bitset\) 的做法。

首先,若 \(sze_v\geq\frac{1}{2}sze_u\),直接返回 \(sze_v*(sze_u-sze_v-1)\) 就行了,这里不解释。
剩下的就是一个二进制优化完全背包,由于时限和动态大小,所以这里要手写 \(bitset\)
懒得写了,抛个soluion代码。

posted @   nagato__yuki  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示