G

显然答案就是固定的, 就是两个序列分别求相邻两个数绝对值的差加起来就可以了。

A

构造考虑让所有 gcd 都是1, 那么对角线上面按照往左, 往下, 往左, 往下连续放数就好了。

D

显然是每个优惠券用在其区间种最便宜的那个身上。 暴力用然后对所有的物品从小往大排序取就可以了。

F

结论 (波利尼亚克猜想): 对于任意奇偶性相同的 x, y, 存 在无穷个 z, 使得 x + z, y + z 为质数.

设 f(i, j) 表示填到 i, a[i] 是不变还是变成1还是变成偶数还是变成大于1的奇数, 转移即可。

J

直接状压DP。

I

把元素按照 $(\frac{x}{k}, x \mod k)$ 处理, 维护右边一列和已经加入最右边一列的倒数第二列, 使用 pbds :: tree 可以简单完成。

1
2
using namespace __gnu_pbds;
tree <std :: tuple<i64, int, i64>, null_type, std :: less<>, rb_tree_tag, tree_order_statistics_node_update> T;

注意添加一维随机数用于去重。

C

基于找最小元的想法, 抵消区间两端的字符直到不相等为止, 那么肯定删掉一端的一些字符直到找到相等字符, 又因为只能删一段, 所以留下来的一定是从某个端点开始的回文串, 使用PAM做区间回文串即可。然后球方案数就是平移删除区间, 只用二分+哈希求LCP即可, 代码没啥细节。

M

定义原图中边为红的, 两个图之间的边是蓝的, 其实要求就是每个红边连通块里面有一对蓝边完整保留就行。

那这个直接对红色连通块 dp 就完事了, 设 dp(x, 0/1) 表示 x 子树里面有没有定一对蓝边保留, 直接转移即可。

B

类欧狗都不做。

E

E 挺有意思, 但是懒得写了。