tg 75 solution
T1
就是有这样一个事情,一个\(n\)有解当且仅当\(2\not | n\)
证明考虑\(sum=\sum\limits^{2\cdot n}_ {i=1}i=\frac{2\cdot(2\cdot n+1)\cdot n}{2}=n\cdot(2\cdot n+1)\)
当\(2| sum\)的时候,
最优情况下是对于前\(n\)个数和恰好是\(\frac{sum}{2}\)的
这个时候,由于你往后移动了一个数,
相当于删掉一个数但是加回来一个不同的数,
所以和至少会减\(1\)/加\(1\),同时另外一半会随之加\(1\)/减\(1\)
这样极差最少是\(2\),因此这个时候无解,
否则,每个和变化\(1\)的时候,另外的部分会变成原和,所以极差是\(1\)
发现\(sum\)的表达式中\(2\cdot n+1\)这一项恒为奇数,
因此\(sum\)的奇偶性取决于\(n\),所以一个\(n\)有解当且仅当\(2\not | n\)
考虑构造,
面向样例编程于是会发现构造形如
\(2,3,...,2\cdot n,1,4,5,...\)
于是构造方式就显然了
并不好文字叙述的构造方式
a[n] = 2 * n, a[n + 1] = 1;
int l = 1, now = 2, r = n + 2;
for (int i = 1; i <= n / 2; i++) {
a[l] = now;
a[l + 1] = now + 1;
a[r] = now + 2;
a[r + 1] = now + 3;
l += 2, r += 2;
now += 4;
}
上述构造方式满足删掉最前面的数,加入最后面的数的时候
前\(n\)个数和的变换是\(+1\space -1\)交替出现
然后初值恰好为\(\frac{sum}{2}\)(说不好上取整还是下取整的)
然后它们就恰满足极差等于\(1\)
T2
注意到\(\beta_1\)集合的本质是大小为\(n\)的独立集
然后\(\beta_2\)集合的本质是大小为\(n\)的匹配
注意到这两个点的点数和恰为\(3\cdot n\)
所以一个不存在,另一个必存在,
(所以另外有一个东西就是Impossible
是Impossible
的)
证明考虑接下来的构造方式
对于每条边,尝试将其加入匹配
如果成功加入\(n\)条边,那么直接输出这\(n\)条边编号就行了
否则,因为匹配用掉的点数不足\(2\cdot n,\)不在匹配中的点至少为\(n\)
然后,不在匹配中的点,其所有连边必然和在匹配中的点连边
否则就可以将其加入匹配
事实上,在匹配中的点集和不在匹配中的点集交集为空
所以,我们选出\(n\)个不在匹配中的点,它们两两不连边,
也就是一个独立集了
实现考虑用一个vis
数组记录每个点有没有在匹配当中
如果两个点都没在匹配当中,两个点vis
都设成\(1\),然后把这条边放进答案,否则啥都不管
如果答案集合边数够了\(n\),把编辑里的边全部输出
到最后边加完了答案集合都没有到\(n\),清空答案集合再随便找\(n\)个vis
是\(0\)的输出就完事了
T3
参考排序那道题,二分中位数
然后\(0/1\)覆盖,对于大于等于\(mid\)的值为\(1\),否则就是\(0\)
然后有如果两个相邻的\(0/1\)直接返回。
否则返回第一个元素在\(0/1\)意义下的值
T4
黑的,没改