do_while_true

一言(ヒトコト)

Day 1: Anton Trygub Contest 1 from the Osijek Competitive Programming Camp 2023

The 1st Universal Cup. Stage 4: Ukraine

标注了《深刻感受到了 the king of conclusion LWLAymh 的强大/kt》的是 ymh 老师秒掉的结论题。

A

题解

从大到小,第奇数次插入的时候扔到左边,偶数次扔到右边。

B

题解

相邻两个 \(f\) 的差如果是 \(0\),那么相当于下标差为 \(k\) 的这两个 \(a\) 值是相同的,否则会告诉这两个 \(a\) 具体的值分别是多少。那么考虑不断 \(+k\) 得到的环,这个环中如果有两个相邻的位置通过 \(f\) 的差得到了具体值,整个环的具体值就确定了。确定不了的就是所有 \(f\) 都告诉我们 \(a\) 是相同的,但是不知道具体应该取 1 还是 0.

现在有 \(g=gcd(n,k)\) 个环,每个环环长为 \(n/g\),由于 \(g|k\),那么 \(f_1\) 实际上还告诉了每个环在前面 \(k/g\) 位的和,如果减去已经可以确定的环,那么就知道了在无法确定的环中,有几个是全 1 环,有几个是全 0 环,但是我们并不能确定这些环直接的顺序,只能知道它们可能位于 \(g\) 个环的哪些位置。

枚举 \(g\) 个环中有 \(i\) 个还未确定的话,把式子写出来,拆一拆,吸收一下,就能二项式定理从而 \(\mathcal{O}(\log)\) 快速幂来算了。

C

题解

贪心,假设前 \(i\) 个里面有 \(w\)W\(b\)B

  • \(w>b\):前面留下 \(w-b\)WBWBWB...W 这样的路径;
  • \(b>w\):前面留下 \(w-b\)BWBWBW...B 这样的路径;
  • \(b=w\):只有一条 WBWBWB...WB 这样的路径。

后面新加进来一个 B 还是 W 都能贪心地使其仍能满足条件(新开路径,或者把两条路径连起来)。

这是答案的下界。对于每个间隔,算一下它被经过的次数,假设有 \(x\) 个跨越这个间隔的边,那么左侧内部会有 \(\frac{2i-x}{2}\) 条边,这个边数还会有个上界 \(2\min(b,w)\),所以 \(x\geq 2(w+b)-4\min(w,b)=2|w-b|\),而这个构造恰好达到了这个下界。

还有问题是计数,由于不知道前面有多少个单个蹦的 W 或者 B,因为这它正反没有区别。比较 creative 的是将无向哈密顿回路计数改成有向哈密顿回路计数,这样就可以放心地随意拼接路径,最后将答案除以 2 即可。

  • 如果 \(w>b\):后面是 W,方案数不变;后面是 B 方案数乘上 \((w-b)(w-b-1)\),选出 B 的前驱和后继连的是哪条有向链。\(w<b\) 类似。
  • 如果 \(w=b\):方案数则乘 2,头尾两种拼上去的方式。

D

深刻感受到了 the king of conclusion LWLAymh 的强大/kt

题解

结论是将 \(a_{i,j}=1\)\((i,j)\) 两两相连,再 floyd 来 check 合不合法。

如果有解,那么假设 \(a_{i,j}=0\)\(i,j\) 长度为 \(t\) 的最短路是经过 \(i\to o\to ...\to j\),由于 \(dis(i,o)=1\)\(dis(o,j)=t-1\),那么构造中 \(i,o\) 有边 \(o,j\) 有边而 \(i,j\) 无边,最短路为 2.

E

题解

如果 \(\operatorname{xor}a_i\neq 0\) 那么随便找一个位置切一刀就是答案。

否则考虑找到第一个非零位置,假设其值为 \(x\) 从它后面切一刀,后面那部分的 \(\operatorname{xor}\)\(x\),再在这个段里面枚举一个前缀使得 \(\operatorname{xor}\) 不是 \(x\) 也不是 \(0\),再切开即可。

如果找不到答案,说明这个序列只由 \(x\)\(0\) 组成,并且有偶数个 \(x\),由于每一段的 \(\operatorname{xor}\) 只有 \(0,x\) 两种值,又不能只分两段,根据鸽巢原理必然有两段的 \(\operatorname{xor}\) 是相同的,自然就无解了。

F

深刻感受到了 the king of conclusion LWLAymh 的强大/kt

题解

二分图会限制很多东西,三染色也带给很多思考方向。首先 \(K_4\) 不能三染色,而连通二分图并且点数 \(\geq 4\),意味着任选三个连通的点,用至多三条边将它们连成 \(K_4\) 就是一个合法的解。那么答案只能是 2 或者 3,到这里就可以猜结论,如果存在四个点能用两条边连成 \(K_4\) 那么答案是 2,否则答案是 3.

首先不存在奇环,所以答案是 2 就是出现四元环的情况。现在证明若不存在四元环,那么无论怎么加两条边,一定不存在三染色:

先对原先的图进行二分图染色,假如连了 \((a,b)\)\((c,d)\).首先如果边横跨了两侧一定没用。如果两条都连在同一侧也没用,将 \(b,d\) 染成第三种颜色就行。

如果 \((a,b)\) 在左侧,\((c,d)\) 在右侧,不存在四元环那么 \((a,c),(a,d),(b,c),(b,d)\) 这四条边至少一条不存在,将不存在的那条边的两个端点染成第三种颜色,那么就可以看成删掉这两个点,删完剩下的是二染色。这样就构造出一个三染色了。

G

省队集训搬过。

题解

假如固定一个起点 \(1\),那么 \(\mathcal{O}(n2^n)\) 状压判断有没有到 \(i\) 的哈密顿路(\(f_{S}\) 表示走过了 \(S\),最终到达的节点集合是什么)。

起点不是 \(1\) 的话,对于起点是 \(x\) 的情况,枚举 \(x\to 1\) 的路上的点集是啥,另一半点集就是其补集,然后根据 \(f\) 来判能不能接起来。

这样总的时间复杂度就是 \(\mathcal{O}(2^nn)\) 的了!

I

题解

\((1,1)\)\((n,m)\) 的路径长度是 \(n+m-1\),而这条路径必须是递增的,而最多只能填 \(n+m\),这意味着如果 \((i,j)\)\(i+j-1\),然后哪个地方加了个 1,那么它的右下角一定也都是加了个 1 的,这样就顶到上界了。

现在问题就变成了要填一个 01 矩阵,要满足 1 的右下角都是 1,0 的左上角都是 0,初始已经给定了若干个位置处的值,询问能够填出多少个 01 矩阵。从上往下一行一行,令 \(f_{i,j}\) 为已经填完了前 \(i\) 行,第 \(i\) 行的最后一个 0 在 \(j\),然后前缀和优化 dp 就行。

J

题解

看一下答案可能是啥?\(0\) 就是都递增的情况,\(n\) 就是整体逆序对数是奇数。\(n-1\) 就是存在一个位置对逆序对数的贡献是奇数。那么剩余的情况就是整体逆序对为奇数并且每个位置对逆序对数的贡献都是偶数。由于并不是递增的情况,随便跳出一对逆序对 \(a_x>a_y,x<y\),将 \(a_x,a_y\) 删掉即可。那么此时答案就是 \(n-2\)

所以问题就变为了:每次 swap 两个数,依次判断以下几个命题:

  • \(a\) 是否递增;
  • 整体逆序对数是否为奇数;
  • 是否存在一个数对逆序对数的贡献是奇数。

解决方案分别为:

  • 判断 \(a\) 是否递增,只需要开个变量记录一下有多少满足 \(a_i<a_{i+1}\)\(i\)
  • 由于每次 swap,总逆序对数奇偶性一定会取反,所以只需要在最初始时求出逆序对数即可;
  • 手玩画图可以发现 swap \(a_x\)\(a_y\),只有它们两个对逆序对数的贡献的奇偶性会取反,其余的奇偶性都不变,直接开个数组维护每次 swap 并取反就行。

K

深刻感受到了 the king of conclusion LWLAymh 的强大/kt

渺小的心灵受到了极大的震撼。

题解

找个必要条件,\(a\to b\) 连边后,整张图是一个强连通分量,要不然最小值会卡在某个地方。这个是充要的。

充分性还是尝试构造。首先如果构造单个有向环可以任意重排,那么单个强连通分量一定也可以任意重排(依次对于每个 \(x\) 以及它想到达的点 \(y\) 考虑,\(x\)\(y\) 的路径一定可以由若干个简单环拼出来)。

对于一个成环的排列,前面的比后面的大则可以交换。构造的思路是找到一个中间态(可以有很多个,但是要证明中间态之间能任意到达),使得任意排列可以到达中间态,中间态也能到达任意排列。这样就能证得任意排列都能到达任意排列。

选取中间态为 \((1,2,3,\cdots,n)\),任意排列操作到它就是,先将 \(n\) 移动到应该去的位置,然后将 \(n-1\) 不断右移直到不能移动为止,那么它一定在 \(n\) 的左边,然后再不断右移 \(n-2,n-3,...\),然后就是 \((1,2,3,\cdots,n)\) 怎么到达任意排列?(这里构造了任意到顺序的方案)

首先,\((1,2,3,\cdots,n)\) 到达 \((n,n-1,n-2,\cdots,1)\),先将 \(n\) 右移 \(n-2\) 步得到 \((2,3,4,\cdots,n-2,n,n-1)\),然后 \((n,n-1)\) 就可以看成一个元素了,从而归纳到 \(n-1\) 的情况。对于 \(n=2\) 时是简单的,所以 \((1,2,3,\cdots,n)\) 可以到达 \((n,n-1,n-2,\cdots,1)\).(这里构造了顺序到逆序的方案)

然后考虑 \(p:\overleftarrow{1\to 2\to 3\to\cdots \to n}\) 怎样 \(\Rightarrow\) 任意排列 \(q\)。先考虑这样一个问题,将环全部反向之后,怎样让任意 \(q\) 到达 \(\overrightarrow{1\gets 2\gets 3\gets 3\cdots \gets n}\)

  • 先让 \(q\Rightarrow a:\overrightarrow{n\gets n-1\gets n-2\gets\cdots\gets 1}\)(就是任意到顺序)
  • 然后让 \(a\Rightarrow p:\overrightarrow{1\gets 2\gets 3\gets\cdots \gets n}\)(顺序到逆序)

然后将这个操作序列,倒着,对原先的环操作,那么就是 \(p:\overleftarrow{1\to 2\to 3\to\cdots \to n}\Rightarrow\) 任意排列 \(q\) 的方案了。这样就构造出了顺序到任意的方案。

有了任意到顺序,顺序到任意,自然就得到了任意到任意的方案。

posted @ 2023-05-03 22:02  do_while_true  阅读(139)  评论(0编辑  收藏  举报