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\)
所以一个不存在,另一个必存在,
(所以另外有一个东西就是ImpossibleImpossible的)
证明考虑接下来的构造方式

对于每条边,尝试将其加入匹配
如果成功加入\(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

黑的,没改

posted @ 2022-10-29 07:50  2K22  阅读(30)  评论(0)    收藏  举报