Loading

题解-ARC104

ARC104


ARC104A Plus Minus

小学数学。 aclink(0)


ARC104B DNA Sequence

枚举区间然后开个桶统计一下即可。aclink(0)


ARC104C Fair Elevator

先确保 \(a_i < b_i\) 且所有给出的数没有重复。

\(s_i\) 表示 \(i\) 上的桥距。具体地,\(s_{a_i} = b_i - a_i\)\(s_{b_i} = a_i - b_i\)

\(a_i, b_i\) 合法当且仅当 \(s_i\) 合法,\(s_i\) 合法当且仅当它可以拆分成若干长度为 \(2k\) 的区间,由前半段 \(k\)\(+k\) 和后半段 \(k\)\(-k\) 个组成。

考虑到数据范围很小,设 \(f_i\) 表示 \([0, i)\) 是否可以合法。然后转移的时候根据上面的规则判断区间是否可以合法即可。

aclink(1)


ARC104D Multiset Mean

对于所有 \(1\le i\le N\),求有多少 \(1, 2, ..., N\) 最多用 \(K\) 次组成的可重集平均数为 \(i\)

枚举 \(i\),相当于问有多少 \(1 - i, 2 - i, ..., N - i\) 最多用 \(K\) 次组成的可重集和为 \(0\)

然后这个东西可以用次数可以为负的生成函数搞成 \(N\)\(2\) 项式除以 \(N\)\(2\) 项式的形式,并且 \(i\)\(i + 1\) 只差一项分子一项分母。暴力乘除即可。

时间复杂度 \(\Theta(N ^ 4)\),空间复杂度 \(\Theta(N ^ 3)\)

aclink(*0)


ARC104E Random LIS

考虑到 \(N\) 很小,相对大小的种数不会很多,可以暴搜枚举所有 \(N\) 个数的相对大小。

然后用组合数学求出这种相对大小的出现次数乘以用 dp 求出最长上升子序列长度即可。

aclink(*2)


ARC104F Visibility Sequence

这种码量的题我搞了一整个下午,觉得我可以退役的可以在评论区里 D 我。

这种统计容易重复的东西最好想办法在最优值上统计它(下文的至少为 \(x\))。

如果把所有 \((i, P_i)\) 的边都连出来,那么会形成一棵 \(n\) 个点的森林。

如果 \(h_j = h_i\) 因为当 \(i > j\)\(i\) 不会向 \(j\) 连边,所以可以当作 \(h_i > h_j\)

所以可以认为所有值不一样,这样森林就会有个最高点,分成两个小森林。

考虑区间 dp,设 \(f[l][r][x]\) 表示 \([l, r)\) 的区间最大值为 \(x\) 且最大值至少为 \(x\) 的森林数。

\(f[l][r][x]\) 可以由 \(f[l][mid][a]\)\(f[mid + 1][r][b]\) 转移当且仅当 \(X[mid] \ge x\) 并且 \(a = x\) 或者 \(b + 1 = x\)。实现的时候需要维护 \(f\) 数组 \(x\) 这维的前缀和 \(s\)

时间复杂度 \(\Theta(n ^ 4)\),空间复杂度 \(\Theta(n ^ 3)\)

aclink(*1)


posted @ 2021-04-21 14:03  George1123  阅读(209)  评论(0编辑  收藏  举报