摘要:
又一次错过了单杀 *2500 的机会,不知道该说什么了。。 先把 $a$ 排序,不会影响答案。 考虑枚举答案 $v$,计算有多少种选择子序列的方法使得答案为 $v$。 这不太好做,考虑放宽限制,计算有多少种选择子序列的方法使得答案不小于 $v$,最后把方案数加起来就好了。 设 $f_{i,j}$ 表 阅读全文
摘要:
首先和 F1 一样,操作 $2,3$ 依旧没有意义。 但是 F1 中至多使用一次操作 $4$ 的结论到这里不成立了。 但是依旧可以发现一些有用的性质。 对于操作 $4$,会有 $4$ 个格子的 $a$ 发生改变,且这 $4$ 个格子形如 $(x,y),(n,y),(x,m),(n,m)$。记这样的操 阅读全文
摘要:
首先操作是可逆的,因此问题可以转化成给定一个局面,要将这个局面全部变为白色格子所花费的最小代价。 关键性质:只有操作 $1$ 和操作 $4$ 是有用的。 证明: 对于操作 $2$,翻转一个以 $(n,1)$ 为左下角,$(x,y)$ 为右上角的矩阵,可以转化为使用两次操作 $1$,第一次翻转以 $( 阅读全文
摘要:
和 CF1188D 是差不多的。 设 $f_{i,j}$ 表示前 $i-1$ 位,有 $j$ 个数对第 $i$ 位进了位时的最大答案。 进位的一定是后 $i-1$ 位最大的一些数,直接利用上一次的排序结果再在前面添加一个数进行对一段后缀排序。 转移就枚举 $A$ 当前这一位填什么。 具体细节看代码( 阅读全文
摘要:
首先有一个比较明显的性质,直径最多经过两条边。 设全局最小值为 $m$。考虑从任意一点出发,经过全局最小值所在的点,然后再到任意点,花费是 $2\times m$ 的。而任意边权 $\geq m$,走两条后的权值必定 $\geq 2\times m$。所以最多就是花费 $2\times m$ 走两条 阅读全文
摘要:
首先先将所有元素离散化。 设 $m=\sum k_i$,因为 $n,m$ 同阶,所以下文均用 $n$ 来表示。 考虑根号分治。 对于元素个数超过 $\sqrt n$ 的序列,不难发现这样的序列至多只有 $\sqrt n$ 个。对于每个序列,把它的元素存进桶中,然后枚举其它所有的序列来判断。这部分时间 阅读全文
摘要:
*1900 不会做了。。 考虑将所有数从小到大排序后顺次插入,用并查集维护。 需要维护以下几个东西:区间的总数量,最长区间的长度,最长区间的个数。 当最长区间的个数等于区间的总数量时,更新答案。 具体细节看代码。 Code: #include <bits/stdc++.h> using namesp 阅读全文