昨天晚上上课没打比赛,今天下午VP了一下做了4道题。晚上订完了E,F,感觉这样一套一套切题收获还是挺大的。
AB是傻题,这里不再赘述(B还WA了一发。。)
C
之前看成XY之和了,还以为要差分约束什么的,其实是一道不难想的构造。
可以证明一定存在解。
考虑一层一层下去搜,先钦定根结点任意一个颜色,然后看它所有出边,如果颜色刚好相同,那么那个点已经进入联通块,给它随便一个颜色(不和from相同即可)。如果颜色不同,那么就不会出现边两端颜色相同而又删掉边的情况,放心把to结点颜色设为边的颜色即可。因为保证初始是连通块,所以这么做最后也肯定是连通块。
D
分类讨论题,主要要从“哪些序列是合法的入手”。
假设$AB=A$,那么$n=3$是可以唯一确定的$AAB$,又多了一个$AA$的子串,再分类讨论。
如果$AA=A$,那么序列肯定只有一种$AAAAA.....AB$,看如果$AA=B$。
可以发现整个序列开头一定是$A$,结尾一定是$AB$,看倒数第三位,如果在$AB$下手,那么肯定是$A$,在$AA$下手是$B$,会多一个子串$BA$。
讨论$BA$,如果$BA$是$B$,那么中间所有都可以出现,$2^{n-3}$,如果是$A$那么对于所有合法序列一定不包含$BB$,$dp$即可。
对于$AB=B$也可以类似推出。
所以给$n=1000$是吓唬你的,还以为是什么高妙的$dp$,结果是$O(n)$的,还好上手没仔细看数据范围,不然做都做不出来
E
之前以为是什么期望线性性,然后统计每个数作为IS元素的概率,但是其实是很难算的,因为选完一个数之后有很多数是不合法的,本来导致这个位置不合法的数现在又选不了了,很难讨论计算。
考虑区间dp,记$dp[l][r]$表示$l,r$作为区间端点且已经被选,中间的期望,最后$dp[0][n+1]$即为答案。
两端已经被选这个状态正好确定了限制,使得很好转移。
$$dp[l][r]=frac{sum dp[l][j]+dp[j][r]}{k}+1 $$ 其中$l<j<r$且$a[l]<a[j]<a[r]$,$k$是可以选择的数量。
转移的时候用树状数组维护一下以$l$为左端点,右端点权值不大于$a[r]$的$dp$和,以$r$为右端点,左端点权值不小于$a[l]$的权值和。区间合法个数可以简单地$n^{2}$预处理。
F
主要思路是枚举$max$长度然后统计方案数。
先搞出一条直径,如果这两个是同色的,那么剩下的无论怎么选$max$都是直径的长度。现在考虑不同色的概率。
然后考虑这么一个性质:记$X,Y$为直径的两个端点,那么不存在另外两个点$P,Q$使得$dis(P,Q)>dis(X,Q)$且$dis(P,Q)>dis(Y,Q)$。这个应该画个图就可以证明了。
所以任意一个点它所构成的最大距离一定是$X,Y$之一。把这个$max(dis(P,X),dis(P,Y)$记下,然后从后往前扫。
相当于$X,Y$各占领了半个直径的树,这些占领区域必须与它们自己同色,如果和对面同色了,那么$max$就被确定了。
考虑对于当前枚举的$i$,$maxdis$大于$i$的都已经确定且不构成影响,然后我们考虑这个$maxdis=i$构成的贡献(只要有一个点贡献即可):
利用容斥,剩下所有点的方案数减去所有$maxdis=i$的点都不构成贡献的方案数。系数要乘2,因为$X,Y$谁黑谁白不确定
注意边界条件,如果这个点刚好在中间(直径为偶数),那么它可以任意染色;如果直径为奇数,那么存在$X,Y$恰好完全占领一半的情况,需要加上。