[CF2101] Codeforces Round 1024 (Div. 1) 赛后总结
A. Mex in the Grid
考虑一维的情况,注意到 0 一定会放到中间,然后左右横跳地依次放后面的数。
二维的情况就是蛇形矩阵。
B. Quartet Swapping
首先观察到一个元素的下标奇偶性肯定不变,直接模拟,每次选择当前位同奇偶性的最小元素换过来,因为相邻的交换可以被视作任意排列,所以这样操作次数变为 \(O(n)\)。
C. 23 Kingdom
相交包含有时是等价的。
拆贡献:
\[\begin{aligned}
ans &= \sum_{x = 1}^n \max_{c_i = x}(i) - \min_{c_i = x}(i)\\
ans &= \sum_{x = 1}^n \max_{c_i = x}(i) - \sum_{x = 1}^n\min_{c_i = x}(i)\\
\end{aligned}
\]
相当于如果我们只用考虑左右端点,而不用考虑左右端点之间的匹配,可以证明如果左右端点的选取都合法,一定存在一种匹配方案。
所以我们分别考虑左右端点,我们考虑计算出选取 \(k\) 个左端点的情况下,最小的 \(\sum_{x = 1}^n\min_{c_i = x}(i)\) 是多少,具体而言就是枚举一个前缀,然后每次到一个位置,需要判断一个最小的 \(k\) 使得满足:“至少存在 \(i\) 个 \(\ge k - i + 1\) 的位置”,这个可以线段树维护,右端点同理。
最后我们可以计算出选取 \(1\sim k\) 个区间的答案,取最大值即可。
总结
我是奶龙,C 没开 long long
以为假了,赛后看到输出 2147381775
答案是 7947954498
天都塌了,以后一定要注意这个问题,尤其是深夜场脑子不清楚的情况下!!!