ARC108 题解&总结

掉分了……


A

解方程

直接(O(sqrt P))枚举即可。


B

用个栈模拟即可。


C

我竟然卡了一会儿。

造棵生成树,直接染色(经过某条边时,如果父亲的颜色不是这条边的颜色,儿子随便染;否则儿子染这条边的颜色)。


D

先写出个DP,发现会算重,然后一直想办法容斥……

后来开始分类讨论快讨论完的时候觉得麻烦,不会是正解,就丢掉了……

实际上还真是分类讨论题。

(c_{AB}=A)。反之类似。

  1. (c_{AA}=A)时,发现只能形成(AAdots AB)这样的字符串。
  2. (c_{AA}=B)时:可以构造出这样的字符串,满足(A)最前,(AB)最后,中间放(A)(B),其中(B)不相邻。
    1. (c_{BA}=A)时:无影响。无需讨论(c_{BB})因为不会出现(BB)
    2. (c_{BA}=B)时:去掉了(B)不相邻的限制。此时(c_{BB})取值无影响。

分别计算即可。


E

题面长了点当时没看。实际上是套路题。

​ 关于期望问题的子问题:记一个问题(S)的当前操作数为(c(S)),每次等概率选择一个操作继续搞下去。假设当前问题(S)被分成两个互不相干的子问题(S_1,S_2)。这时候有(E(S)=E(S_1)+E(S_2))。证明:设(E(S_1,S_2))表示在问题(S_1,S_2)下,单独算(S_1)的期望,假设(nxt(S))(S)的后继状态集合。归纳,假设已经证明(E(nxt(S_1)igcup S_2)=E(nxt(S_1))+E(S_2))(E(S_1,S_2)=frac{1}{c(S_1)+c(S_2)}sum_{S'_2in nxt(S_2)}E(S_1,S'_2)+frac{1}{c(S_1)+c(S_2)}sum_{S'_1in nxt(S_1)}E(S'_1,S_2)=frac{1}{c(S_1)+c(S_2)}sum_{S'_2in nxt(S_2)}E(S_1,S'_2)+frac{c(S_1)}{c(S_1)+c(S_2)}E(S_1))。左边递归下去到(c(S_2)=0)为止再反推回来。可以推出(E(S_1,S_2)=E(S_1))

​ 用人话来解释:在操作(S_2)时,对(S_1)无影响;操作(S_1)时,(S_1)到达每个后继状态的概率是等价的。因此只看(S_1)中的操作,它的期望和(S_2)无关。

知道这个套路之后,直接设(f_{i,j})表示选了(i)(j)((i,j))的期望贡献。写出方程之后拆开可以用树状数组优化。


F

最后半小时开始搞,想出了正解但是自己将它ban掉了,打了个假做法来不及测样例交了上去。

找出直径,如果直径端点颜色相同答案为直径;否则,求出每个点到两个端点的距离(a_i,b_i),问题转化成,对于端点外的点,每个点选(a_i)(b_i),答案为最大值。排序随便搞即可。

可以证明,将树砍掉一些枝条之后,得到的新树的直径端点中至少有一个是原直径的端点。

证明很套路不赘述了。


综上所述其实这次的ARC好像比以前都要简单?

但为什么我却只切了3题呢?

……

感觉自己比较容易高估题目难度,而且在最后那点时间中比较急躁,导致交错误程序上去。

啊啊啊我什么时候atcoder才能上2000啊!!

原文地址:https://www.cnblogs.com/jz-597/p/14031257.html