比赛传送门
A
没什么好说的,打表根据 n 输出就行
Code
1 | void solve() { |
B
观察数据,肯定不能模拟象的路径,只能人算
大概猜一下(1,1)点为起点是最优的
分别计算奇数行能到的位置有多少和有多少奇数行,偶数同理
注意特判
Code
1 | void solve() { |
C
直觉就是只能全选或者全部选才有最小花费
cf打多了天天在这猜
就比较原数组的和与 数组全修改为最小值的和加上最大值 的大小即可
1 | void solve() { |
D
一眼看出没有 1 那么数组子序列之和构成序列 S 的mex为 1
接下来讨论有 1 怎么办
将数组 a 升序排序,记当前能达到的最大连续数字为mx(说的有点难懂,就是当前mex-1的值)
从左向右扫描,如果满足 $a[i]≦mx+1$ ,则将mx加上a[i]
为什么这样可以有效更新?
因为mx意味着之前数组可以取出任何小于等于mx的数[1…mx],也就可以让mx更新到 mx+a[i]
不满足说明这个数对于S的mex的贡献为0,可以删掉
Code
1 | void solve() { |
说些什么吧!