【题解】CF1875

A

  • 注意到:如果钦定使用某个道具,由于倒计时最大值的存在,道具使用得越晚浪费的时间越少。
  • 注意到:如果钦定使用某个道具,那么这个道具的使用时机不重要。
  • 进一步:总是在倒计时只剩 1 秒的时候使用道具即可

B

  • 直觉:k 好大好大,大胆猜测这俩人实际上只是在来回捣撤某几个数
  • 注意到一个人如果换数,一定是用自己的最小值换对面的最大值
  • 考虑两个人所拥有的数的极值区间 [l,r][L,R]
    • 区间有交
      先手交换完后一定持有 r,R,此时后手一定持有 l,L
      后手交换时一定会选择留下 l,L 中更大的,换来 r,R 中更大的
      先手再次交换,一定持有 r,R.....
      显然在这种情况下,结果只有两种,具体取决于 k 的奇偶性
    • 区间无交
      • 先手数更大
        先手显然不换
        后手显然用自己最小的换先手最大的
        先手显然要把后手换的数再换回来
        循环同上,判 k 奇偶即可...
      • 后手数更大
        先手显然用自己最小的换后手最大的
        后手显然要把先手换的数再换回来
        循环同上,判 k 奇偶即可...

C

  • 首先考虑是否有解
  • 读完题容易列出式子:n×2k0(mod m)
  • 显然它的充要条件是:除了 m 可比 n 多且仅多 2 这个质因子外,n,m 质因子完全相同
  • 判断的具体实现:判断mgcd(n,m) 是否是 2k
  • 要满足上述式子,显然 klog 级别的,也就是说切瓜的次数是 log 级别的,直接模拟并统计答案即可

D

  • 我们首先加强这道题 n1e6
  • 显然 a 中数的先后顺序不重要,而每种数的个数重要,于是直接存桶
  • 想象一下:mex 需要一个桶前缀全部非 0,我们要做的就是在某个位置”截断“
  • 显然如果要截一个位置,一次性把数全删干净才是最优的
  • 显然截数的位置是递减的
  • 所以我们截数的策略一定形如:从大到小依次删干净某些位置的数,最终把 0 这个位置的数删干净
  • 不妨转换题意:删某个位置的数有代价,求最终把 0 这个位置的数删干净的最小代价
  • 考虑删除一个数的代价:
    • 假设这个数有 cnt 个,那么就要删 cnt 次,代价就是这个数彻底删掉之前的 mex×cnt
    • 而这个数彻底删掉之前的 mex 是多少呢?不难发现就是上个删数的位置
  • 设截断 i 这个数所需最小代价为 fi
    容易列出转移方程 fi=fj+numj×cnti (i+1j[mex])
  • 注意到我们在设计“代价”时模拟的过程相当于先加代价后删数,与题意相反,这也相当于我们算的答案多了一次全局 mex 的代价,只需要在输出时减掉即可。
  • 到这里,综上使用 O(n2) 的 DP 可以通过原题,但这题的最优解是 O(n) 的。
  • 考虑数 i,j (i<j)
    如果 cnti<=cntj 那显然我们一定不会截断 j 这个位置,因为这显然不优于截断 i 这个位置
  • 据此,我们可以删掉需要不可能用到的转移点
  • 考虑怎么把转移点数卡满:
    从小到大考虑每种数,显然每个数的出现次数都比上一个数少一即可,当转移点数达到 O(n) 量级时,第一个数的出现次数也是 O(n)
    如此,总共需要 O(n2) 个数,也就是说,如果数个数的总数是 O(n) 的,有效转移点数就是 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) 或者不确定。这样我们对于一组询问,可以压缩成一个状态,而本质不同状态有 58 种。预处理一下最短路即可。然后对于不确定的位,预处理的时候枚举它是什么即可。
  • 时间复杂度 O(58+tlogV)
  • 感觉这题教育意义大于实际做的价值:
    • 位运算位之间互相独立,这通常可以成为突破口
    • 看到状态转移乱七八糟的时候可以考虑图论最短路

F

  • 非常好概率 dp 题
  • 注意到题目直接给出拓扑逆序,所以容易有一个显然的想法:对于每个 u,选择概率最大的 v 去走,如果失败了再换下一个
  • 注意到:走一个点成功的概率与图结构完全无关,而只与点的出度数量与这个点是第几个被选择的有关,且“失败”后删掉两条边这种东西很像是子结构递归,这启发我们考虑 dp
  • 设状态 fi,j 表示出度为 i 的点,最终走向概率第 j 大的 v 的概率
  • 容易写出 f1,1=1f2,1=0.5f2,2=0
  • 转移:fi,j=fi2,j2×j2i+fi2,j1×iji
    转移显然
  • 预处理出 f 后直接按拓扑序 dp 一下就好了
posted @   yeyou26  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示