比赛链接:https://atcoder.jp/contests/agc038/tasks。
A - 01 Matrix
我无比智障的写了个贪心。。。
结果正解构造好简单啊啊啊
放的是我的贪心的代码,复杂度多个$\log$。
1 |
|
B - Sorting a Segment
我们枚举当前排序那一段,考虑排序完之后的数列出现过没。
首先特判不变的情况。
假设当前区间是$[i-k+1,i]$,那么上一个区间是$[i-k,i-1]$,这两种情况排序后相等当且仅当$[i-k,i]$最小值为$a_{i-k}$,最大值为$a_i$,手玩一下就可以发现。
并且没有其他的情况会导致相等,所以维护下最大值最小值就好了。
然后我无比智障的写了个线段树,因为单调队列难写
1 |
|
C - LCMs
这种数论题都被做烂了。。。
设$b_i$表示$a_x=i$的个数,式子可以写成:
最后处理下重复的情况就行,那么莫比乌斯反演一下:
复杂度$O(n\log n)$。
1 |
|
D - Unique Path
我想不出的神仙题。。
首先对于唯一路径的限制直接连边缩起来,连成一棵树。
对于不唯一的限制,如果两点在一个块中肯定不合法了。
假设我们当前有$c$个块,也就是说我们还需要连$m-n+c$条边。
考虑连通块之间怎么连边,如果我们对于一个连通块选出一个代表点,连边只在这些点之间进行,那么可以发现无论我们怎么连,块内的唯一路径的限制还是可以满足。
如果没有不唯一限制,那么只要满足$c-1\leqslant m-n+c\leqslant c(c-1)/2$就行了。
否则只要出现一个环就行,也就是$c\leqslant m-n+c\leqslant c(c-1)/2$。
注意到这种情况下如果只有两个以下个连通块是不合法的。
1 |
|
E - Gachapon
神仙题啊啊啊啊啊,我对着官方题解看了好久才看懂的。。。
首先考虑$\min-\max$容斥,问题转化为了:对于所有集合$s$求有任意一个大于等于$b_i$就停止的期望步数乘上$(-1)^{|s|+1}$之和。
这个问题又可以转化为:求任意一个都没到$b_i$的情况数的期望出现次数,因为对于一种状态,假设它是第一个超出的状态,那么他前面一定都是不超出的状态,状态数就等于步数。
首先考虑确定了集合$s$的情况,假设当前状态是第$i$个出现了$x_i$,考虑出现这个状态的概率,根据一点组合数可以知道如果硬点选不到其他的数,概率就是:
如果考虑其他数可以发现出现概率是没有影响的,但是有影响的是当前状态出现了之后可能持续若干轮选其他的数,导致这个状态出现了多次。
更具体的,假设下一个选的数为当前集合里的数的概率为$P$,那么这个状态期望会持续$1/P$次,所以这个状态的贡献就是:
那么计算所有状态贡献和可以利用$dp$,设$f_{i,j}$表示当前状态$\sum a=i,\sum b=j$的贡献和,转移就枚举当前数出现了几次,最后在把前面的系数乘上去。
然后考虑怎么算对于每个集合的贡献和,其实这也非常简单了,考虑$dp$的时候加入一个数就多乘一个$-1$就行了。
复杂度为$O((\sum a)(\sum b)^2)$。
1 |
|