ARC108 题解&总结

掉分了……


A

解方程

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


B

用个栈模拟即可。


C

我竟然卡了一会儿。

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


D

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

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

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

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

  1. \(c_{AA}=A\)时,发现只能形成\(AA\dots 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)\bigcup S_2)=E(nxt(S_1))+E(S_2)\)\(E(S_1,S_2)=\frac{1}{c(S_1)+c(S_2)}\sum_{S'_2\in nxt(S_2)}E(S_1,S'_2)+\frac{1}{c(S_1)+c(S_2)}\sum_{S'_1\in nxt(S_1)}E(S'_1,S_2)=\frac{1}{c(S_1)+c(S_2)}\sum_{S'_2\in 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啊!!

posted @ 2020-11-24 17:04  jz_597  阅读(230)  评论(0编辑  收藏  举报