CF1799
A
读懂题后直接模拟,重点是读懂题!
B
如果所有数不相等且最小值为 ,无解,因为无法将一堆大于 的全部变为 。
除此以外的情况一定有解,可以发现所有值除以一个比自己小的数,一定都不会变为 。于是我们可以每一轮让所有大于最小值的数除以最小值,这样最大值一定会变小,每个数至多操作 次,然后所有数都将相等。
C
大体上的思路是,从两边往中间填,每次往左右放最小的两个字符,如果左右不一样大了,就把剩下的字符从小到大放在大的那边。
但是观察样例发现如果当前剩下的字符形如 "abb...b",会把这个 'a' 放在最中间。
然后特判这种情况即可,注意实现。
D
的 dp 不需要脑子: 已经处理了前 个任务,一个电脑的最后一个任务是 ,另一个电脑的最后一个任务是 。然后 会转移到 ,直接 dp 即可。
然后发现这个转移很傻,每次是全局加,单点改,维护全局最大值。就可以直接打标记,再记录最大值,复杂度 。
E
不想写!
F
这个题面真的是!它这个 “choose some 1<=i<=n",不知道有多少人跟我一样认为一次可以选多个 ,然后对着样例看了好久……
先把所有数从大到小排序,对于大于 的所有数,一定是选一个前缀做 "12" 操作,然后一段区间做 ”1" 操作,再一段做 “2” 操作。
对于不大于 的所有数,一定是一个前缀做 "2" 操作,然后接下来一段做 “1” 操作。
综上,最后的操作一定是 "12"+"1"+"2"+"1" 于是我们枚举前两段的长度,然后就确定了每一段的长度,就可以直接前缀和算出答案。
G
把同一类的缩在一起,那么对于每个点,都有出度 ,入度 。然后就要统计有多少满足条件的图(边带编号)。
于是就直接 dp: 表示前 个点,有 条出边连向 。 确定的时候,还需多少入边也就确定了,然后枚举 有多少出边和入边与前面匹配。分析一下复杂度,可以发现是 。
H
设 表示钦定 号点在最后的连通块内,删边的方案数。那么最后的答案就是 。
求一个 可以以 为根树上 dp:设 表示 子树内进行了 集合的删边操作。然后合并的时候枚举子集,一次合并复杂度 。枚举根来进行 dp,复杂度 。
然后改成换根 dp 即可,复杂度 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】