摘要: 第一问(怎么都用二分?怎么都用二分?怎么都用二分?) 用哈希 + unordered_map 秒了。 建议不要用 map,实测超慢。 第二问 打个表你会发现是斐波那契数列,但是具体为什么? 设 \(f_i\) 为以第 \(i\) 辆车结尾的可能排列数。 可以发现放错了就是交换相邻两个车,然后我们对于 阅读全文
posted @ 2025-07-21 12:57 KukCair 阅读(5) 评论(0) 推荐(0)
摘要: 二分 我们发现答案具有单调性。 考虑二分的 check 怎么写。 check 首先大军肯定会往下走,往回走是不划算的,纯浪费时间; 而凤凰社会启用大军正在攻克节点的子节点。 设派出 \(x\) 人。 我们设 \(dp_i\) 为以 \(i\) 为根的子树需要从其他地方调来的人,则有 \[dp_i\g 阅读全文
posted @ 2025-07-21 12:57 KukCair 阅读(7) 评论(0) 推荐(0)
摘要: 基本思路 首先观察数据范围,\(n\) 顶顶到 \(5\),整个棋盘也最多有 \(35\) 个块,这你不搜??? 直接搜每一次动哪个块,下落和消除直接模拟。 代码 (我这里把棋盘倒过来了,第一行是底部,行列从 \((1,1)\) 开始,横纵坐标也是反的。) 下落 判断每个块上方是否为空,空就往上找, 阅读全文
posted @ 2025-07-21 12:54 KukCair 阅读(27) 评论(0) 推荐(0)
摘要: 思路简述 观察题目,看到异或和最大,自然想到了 01Trie。 前后缀不相交的条件其实不用管,反正一样的数异或起来是 \(0\),不会产生影响。 那么直接用一个 01Trie 维护前缀异或和最大值,然后对于每个后缀异或和找最大就行了。 代码实现 #include <bits/stdc++.h> us 阅读全文
posted @ 2025-07-21 12:54 KukCair 阅读(2) 评论(0) 推荐(0)
摘要: 树形 DP。 \(size_v\) 为以 \(v\) 为根的子树大小。 设 \(dp_x\) 为 \(x\) 被感染时其子树能留下几个点。 对于一个被感染的点 \(x\) 的孩子的点 \(v\)(未被感染),作如下考虑: 删除 \(v\),则它的子树全部都得以保存。\(dp_x\) 不能加上 \(d 阅读全文
posted @ 2025-07-21 12:54 KukCair 阅读(7) 评论(0) 推荐(0)
摘要: 搜索。 对于每个位置 \((i, j)\),让 \(i \times j\) 向 \(num_{i, j}\) 连一条边,所以起点为 \(1\),终点为 \(n \times m\)。 然后 bfs/dfs 即可。 \(n\) 和 \(m\) 别搞反了,不然喜获 \(77\) pts。 #inclu 阅读全文
posted @ 2025-07-21 12:53 KukCair 阅读(5) 评论(0) 推荐(0)