AGC 049 总结+ABCD题解

AGC 049 总结+ABCD题解

比赛链接

赛况:

202 img 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)\)

posted @ 2020-11-20 11:51  WWW~~~  阅读(339)  评论(0编辑  收藏  举报