A
- 注意到:如果钦定使用某个道具,由于倒计时最大值的存在,道具使用得越晚浪费的时间越少。
- 注意到:如果钦定使用某个道具,那么这个道具的使用时机不重要。
- 进一步:总是在倒计时只剩 1 秒的时候使用道具即可
B
- 直觉:\(k\) 好大好大,大胆猜测这俩人实际上只是在来回捣撤某几个数
- 注意到一个人如果换数,一定是用自己的最小值换对面的最大值
- 考虑两个人所拥有的数的极值区间 \([l,r]\)与\([L,R]\)
- 区间有交
先手交换完后一定持有 \(r,R\),此时后手一定持有 \(l,L\)
后手交换时一定会选择留下 \(l,L\) 中更大的,换来 \(r,R\) 中更大的
先手再次交换,一定持有 \(r,R\).....
显然在这种情况下,结果只有两种,具体取决于 \(k\) 的奇偶性
- 区间无交
- 先手数更大
先手显然不换
后手显然用自己最小的换先手最大的
先手显然要把后手换的数再换回来
循环同上,判 \(k\) 奇偶即可...
- 后手数更大
先手显然用自己最小的换后手最大的
后手显然要把先手换的数再换回来
循环同上,判 \(k\) 奇偶即可...
C
- 首先考虑是否有解
- 读完题容易列出式子:\(n\times 2^k \equiv 0 (mod\ m)\)
- 显然它的充要条件是:除了 \(m\) 可比 \(n\) 多且仅多 \(2\) 这个质因子外,\(n,m\) 质因子完全相同
- 判断的具体实现:判断\(\frac{m}{\gcd(n,m)}\) 是否是 \(2^k\)
- 要满足上述式子,显然 \(k\) 是 \(log\) 级别的,也就是说切瓜的次数是 \(log\) 级别的,直接模拟并统计答案即可
D
- 我们首先加强这道题 \(n\leq 1e6\)
- 显然 \(a\) 中数的先后顺序不重要,而每种数的个数重要,于是直接存桶
- 想象一下:mex 需要一个桶前缀全部非 0,我们要做的就是在某个位置”截断“
- 显然如果要截一个位置,一次性把数全删干净才是最优的
- 显然截数的位置是递减的
- 所以我们截数的策略一定形如:从大到小依次删干净某些位置的数,最终把 0 这个位置的数删干净
- 不妨转换题意:删某个位置的数有代价,求最终把 0 这个位置的数删干净的最小代价
- 考虑删除一个数的代价:
- 假设这个数有 \(cnt\) 个,那么就要删 \(cnt\) 次,代价就是这个数彻底删掉之前的 \(mex\times cnt\)
- 而这个数彻底删掉之前的 \(mex\) 是多少呢?不难发现就是上个删数的位置
- 设截断 \(i\) 这个数所需最小代价为 \(f_i\)
容易列出转移方程 \(f_i=f_j+num_j\times cnt_i \ (i+1\leq j \leq [原始序列的mex])\)
- 注意到我们在设计“代价”时模拟的过程相当于先加代价后删数,与题意相反,这也相当于我们算的答案多了一次全局 \(mex\) 的代价,只需要在输出时减掉即可。
- 到这里,综上使用 \(O(n^2)\) 的 DP 可以通过原题,但这题的最优解是 \(O(n)\) 的。
- 考虑数 \(i,j \ (i<j)\)
如果 \(cnt_i<=cnt_j\) 那显然我们一定不会截断 \(j\) 这个位置,因为这显然不优于截断 \(i\) 这个位置
- 据此,我们可以删掉需要不可能用到的转移点
- 考虑怎么把转移点数卡满:
从小到大考虑每种数,显然每个数的出现次数都比上一个数少一即可,当转移点数达到 \(O(n)\) 量级时,第一个数的出现次数也是 \(O(n)\) 的
如此,总共需要 \(O(n^2)\) 个数,也就是说,如果数个数的总数是 \(O(n)\) 的,有效转移点数就是 \(\sqrt{n}\) 的
- 再套上述 DP,显然总时间复杂度 \(O(n)\)
E
- 对于 \(a, b, c, d, m\) 按位考虑,发现相同的 \((a, b, m)\) 无论如何操作必然还是相同的。
- 于是考虑对于每个可能的 \((0/1, 0/1, 0/1)\),所有终态有 \((c = 0/1, d = 0/1)\) 或者不确定。这样我们对于一组询问,可以压缩成一个状态,而本质不同状态有 \(5^8\) 种。预处理一下最短路即可。然后对于不确定的位,预处理的时候枚举它是什么即可。
- 时间复杂度 \(O(5^8 + t \log V)\)。
- 感觉这题教育意义大于实际做的价值:
- 位运算位之间互相独立,这通常可以成为突破口
- 看到状态转移乱七八糟的时候可以考虑图论最短路
F
- 非常好概率 dp 题
- 注意到题目直接给出拓扑逆序,所以容易有一个显然的想法:对于每个 u,选择概率最大的 v 去走,如果失败了再换下一个
- 注意到:走一个点成功的概率与图结构完全无关,而只与点的出度数量与这个点是第几个被选择的有关,且“失败”后删掉两条边这种东西很像是子结构递归,这启发我们考虑 dp
- 设状态 \(f_{i,j}\) 表示出度为 \(i\) 的点,最终走向概率第 \(j\) 大的 \(v\) 的概率
- 容易写出 \(f_{1,1}=1\quad f_{2,1}=0.5\quad f_{2,2}=0\)
- 转移:\(f_{i,j}=f_{i-2,j-2}\times \frac{j-2}{i} + f_{i-2,j-1}\times\frac{i-j}{i}\)
转移显然
- 预处理出 \(f\) 后直接按拓扑序 dp 一下就好了
posted @
2024-11-07 19:40
yeyou26
阅读(
52)
评论()
编辑
收藏
举报