AGC 049 总结+ABCD题解
AGC 049 总结+ABCD题解
赛况:
202 | Gary | \(1800 (4)\\187:23\) | \(400\\51:51\) | \(600\\48:32\) | \(800 (4)\\167:23\) | - | - | - |
---|---|---|---|---|---|---|---|---|
A - Erasing Vertices
这题想的方向错了就比较麻烦了。我一开始以为是上面DAG上dp。卡了一会,做完B题回来三分钟就会做了。
题解:
考虑一个节点\(T\)有多大的概率被选中,假设能到达\(T\)的点的集合为\(S\)。显然能选择\(T\),必须\(T\)是\(S\)中第一个被选择的。则概率为\(\frac{1}{|S|}\)。它被选择的期望次数为\(\frac{1}{|S|}\)。则对答案的贡献为\(\frac{1}{|S|}\)。
n<=100,可以处理出每一个点有多少点能到达它。
时间复杂度为\(O(n^3)\),其实也可以通过bitset优化到\(O(n^3/64)\)。
B - Flip Digits题解
本场比赛最水的题,基本上看了一眼就有了思路。但实现上每个人略有差异。
操作可以看作:
- 消除两个连在一起的1
- 将"01"变为"10",将一个1左移一位
可以发现S中的1为T中的1+2*x。
从后往前考虑,可以发现每一个1,要么往前去和T中的某一个1匹配,要么和前面的某一个1互相消除(肯定是最近的),要么停在原地等后面的来消除。
直接维护一个栈就好了。注意记录栈中元素的奇偶性。
C - Robots
这一题比较坑,你必须要想到step2的最优策略才可以决定step1怎么走。
首先我们将\(a[i],b[i]\)转换成l[i]和r[i]。表示第r[i]个机器人会从r[i]走到l[i] (如果不被消灭的话)。
若所有的l[i] 都>=1 ,则不管它们怎么弄都不会影响到0.则答案等于0
否则,若那些l[i]<=0的都会被其他l[i]>=1的消灭,则答案还是0
若没法全部消灭,则可能会向左延申一些机器人的l[i],向右延申一些机器人的l[i]。注意这些操作可以两两一组,算一次操作。
D - Convex Sequence
这题套路比较明显:维护差分的差分。
由于差分递增,所以差分的差分除了第二个都只需要满足>=0即可。
但是第二个是负数就不太好办了。
我们想一想这是什么造成的?
原因:2*a[2] < a[1]。
我们画一画图就可以发现,我们可以枚举最低点的位置,然后将它下移到0的位置就可以避免这个问题。
然后再分别计算两半的dp就可以了。每一部分是\(O(M\times \sqrt M)\)
则最终对于第i个点的答案=\(\sum_{j+k+x*n=M} L_{i-1,j}*R_{n-i,k}\)
这个像卷积一样的东西一开始把我卡了很久。由于要枚举上面的\(x\)。个数是\(M/N\)的,会TLE。
其实我们只需要把它放在一边就可以了。
\(\sum_{j+k=M} L_{i-1,j}*R_{n-i,k-x*N}\)
这样时间复杂度为\(O(M\times \sqrt M)\)