感受下来, 思维难度有参差, 所以还是可以做的, 虽然有的题和中国赛题差距有点大, 但是无伤大雅?
新的 我要自己做出来更多题!
发现点一个叶子结点的父亲变白点, 那这个叶子就一定要点黑点, 然后这两个点就对其他的部分不造成影响了, 可以删掉, 所以如果一个点有两个叶子结点儿子, 那么直接就是先手胜利.
树的话是, 经典套路奇偶层染色, 变成交换草走. 那么就可以考虑一个子树里面需要移进多少, 移出多少, 分值为 , 那么就可以定义 为这个子树内值的和. 显然根不为 无解, 答案下界为 , 不难构造这就是最优答案.
接着考虑基环树, 偶环的时候考虑环边是 , 假定这个边会操作 次, 那么一边的父亲操作会多 次, 另一边少 次, 断掉这个边之后按树跑出 , 答案即为:
就是求解中位数.
如果是奇环, 那么那个环边就可以让黑点数量 或者 , 所以只要黑点白点数量差为偶数, 就一定可以通过调和来让整张图有解.
直接给答案和那条环边的两个点加上全图黑点与白点的差除以 , 然后按树的做法即可.
令 , 这个圆看成序列也是一样的, 如果 和 相交但不包含, 就在一个连通块.
考虑计算每个连通块对答案的贡献次数. 令 表示区间 任意连边, 且 和 在同一个连通块内的方案数.
枚举这样的区间, 区间长度一定是偶数, 设 表示 个点的环任意连边的方案数, 表示 内还没确定连边情况的点的个数.
转移为 , 答案为 , 时间复杂度 .
比较简单的一道题.
显然可以二分, 一条边恰好经过两次, 所以只能走完一棵子树, 再去走另一个. 考虑 , 设 表示从结点 开始, 第一个走到的叶子结点距离为 , 走回 时的距离为 , 路径上所有长度不大于二分值的情况下遍历完整个子树, 是否可行.
转移很显然, 然后发现当满足 时, 完全没有存在的必要, 故按 排序后 递减时数量最少.
可以分析合并次数, 只在轻边的时候会合并, 合并 次, 故状态总数为 个.
时间复杂度 .
挺好猜的, 但确实不好构造.
令原排列的 长度为 .
若 为偶数, 那么直接令 为以 结尾的最长上升子序列长度, 将 的放入第一个序列, 其他的放入第二个序列即可.
否则 为奇数, 即 , 那么对于其中一个长度为 的 , 要存在一个元素 不在此序列中, 且存在一个长度为 的上升子序列包含它.
这个条件的必要性显然, 充分性构造如下.
任选一个长度为 的 , 根据这个性质, 选择 并假设这个 的上升子序列为 .
将所有满足 , 或 且 的选入第一个序列, 其余的选入第二个序列.
第二个序列中, 所有的 都被选入, 并且只有 种不同的 取值, 即不存在 的上升子序列, 故构成 的上升子序列.
第一个序列中, 由于总共只有 种 的取值, 所以第一个序列中包含 种取值, 故也构成 的上升子序列.
关于判定, 求出每一个元素为起点和终点的最长上升子序列, 即可求出强制包含某个元素的最长上升子序列, 判定其是否大于等于 即可.
时间复杂度 .
若选中点 , 则期望的新位置为 .
根据期望的可加性, , 这个式子只有加减, 涉及的项也相邻, 考虑差分.
令差分数组为 , 不难发现 , 所以 , 实际上是交换了差分数组位置.
那一次大操作就是一个置换, 我们可以单 类似快速幂的做, 也可以做到线性.
具体来说就是把置换拆成若干个循环, 循环要移动的距离其实就是 位, 递推即可.
时间复杂度 .
我觉得很巧妙, 是不可多得的好题.
把问题写成 叉树的形式, 一共 片叶子其中 片写着 , 片写着 . 对于一个非叶子结点, 它的值为它儿子的值的平均值.
假设那 个 的深度分别为 , 个 的深度分别为 , 则根结点的值就是 , 并且我们知道, 假设所有点都是 , 会有 , 若满足这两个条件, 则一定能构成合法的 叉树.
我们把 写成 进制下的小数形式, , 即 个 相加, 而 则可以表示 个 相加, 不考虑进位, 则 , 考虑还原进位则将 减去 并将 加上 , 所以 , 即 , 假设小数有 位, 则 的位数和应该是 .
接下来就可以 方案数了, 设 表示 , , 是否为 , 转移很简单.
前缀和优化一下即可, 时间复杂度 .
感觉还是有点巧妙的, 但也算是去单调性的常用做法.
首先应该先把第三个限制转化, 最开始我只转化为了前 个的和要大于后 个的和, 但是很明显的发现, 并不好 , 所以肯定还要转化一下.
但是显然只看限制三是已经没有前途的了, 结合限制一来看, 我们发现, 因为有单调性的限制, 所以我们只用考虑中点是否符合限制即可.
即需满足 , 简单证明一下, 对于小于 的位置, 左边减去一个较小的数, 右边减去一个较大的数, 仍满足, 对于大于 的数, 左边加上一个较大的数, 右边加上一个较小的数, 仍满足, 当然这个的前提是有单调性.
但是有这个单调性我们还是不好做, 继续考虑转化, 我们考虑差分去掉这个单调性, 令 , 为了不让 很奇怪, 我们令 , 这样每个 实际上就是 .
整理一下式子,
向下取整会影响一点东西, 但其实问题不大, 还是分类一下吧.
对于 是奇数时, 就是 , 整理,一下式子
其中, .
同样的, 考虑偶数, 最后可以推出来 , 综合一下得到, .
好, 现在我们只有限制二没用上了, 即 , 我们发现有的序列是本质相同的, 使得它不同的原因是 .
于是我们考虑确定 的值的时候有多少合法的 , 有两个条件 , 所以合法的个数就是 .
我们令 为 的个数, 那么最终答案就是 .
不难发现计算 就是一个背包, 第 个物品重量为 , 做无限背包, 时间复杂度 .
, 题解差评, 不应该强加笛卡尔树上去的, 容斥检验成果题? 成果检查到不合格.
最初想法, 枚举哪些格子没有被覆盖, 然后对于一个位置如果行列都没有被钦定未覆盖的格子, 那么方案数是 .
复杂度爆炸.
注意到如果一个格子被钦定未被覆盖, 那么他所在的列一定不能放棋子, 行有机会可以放, 重新设计容斥方案.
枚举哪些列里面有格子是未被覆盖的, 那么这些列都不可以放棋子, 设这些列的集合为 .
此时考虑一个极长行连续段的贡献, 假设有 个格子在 里, 那么贡献有两种.
- 这 个格子可以被覆盖, 方案数 .
- 枚举有几个格子是未覆盖的, 方案数为 .
但这样算出来会是错的, 因为 里的列可能没有被钦定的格子.
再套上一个容斥, 枚举集合 , 表示没有被钦定的格子.
设一个极长连续段里面有 个格子在 里, 那么第二种贡献变成 .
注意到此时贡献只和 有关, 所以状态数不会太大.
每次从 最小的地方切开, 下面是一个矩形, 上面是子问题, 且子问题是树形结构, 矩形里的连续段就是上面的子问题加单独算的列.
于是设 表示树上的结点 , 的大小为 , 是否有 .
转移背包合并即可, 独有的列可以看做特殊的儿子, 此时每一列方案数是相同的, 快速幂即可.
时间复杂度 , 预处理后 .
挺有意思的一道题的, 不算难, 其实多想一会应该是能想出来的, 可惜想这题的时候想了一会就摆了.
首先发现, 能构造出来的序列有一个显然的必要条件, 一个数作为新排列的前缀 的时候, 长度不会超过 , 并且如果存在长度为 的段, 那它在原排列中一定在一组里, 但这个条件并不充分.
既然不会超过 , 那我们关注一下 长度为 和 的, 可以发现, 如果存在一个长度为 的, 首先这两数一定在同一组, 并且那一组一定存在一个长度为 的.
这时候我们应该敏锐的考虑同组的在新排列的前缀 序列中的构成, 长度为 , 或者是三个长度为 的, 或者是一个长度为 的和一个长度为 的, 最后一种前后顺序并不重要, 一定是会有合法构成方案的.
这时候充分条件就很显然了, 长度为 的段数不超过长度为 的段数.
考虑如何计数, 由于只关注长度为 的段数和长度为 的段数差, 所以可以设 表示考虑前 个数, 长度为 的段数减去长度为 的段数值为 的方案数.
如果 在 中是最大的, 对于长度为 的排列, 答案就是 , 转移的时候带到系数里即可.
时间复杂度 .
这个 也让我成长了不少啊.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通