题解-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)\) 是否可以合法。然后转移的时候根据上面的规则判断区间是否可以合法即可。
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)\)。
ARC104E Random LIS
考虑到 \(N\) 很小,相对大小的种数不会很多,可以暴搜枚举所有 \(N\) 个数的相对大小。
然后用组合数学求出这种相对大小的出现次数乘以用 dp 求出最长上升子序列长度即可。
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)\)。