2020牛客暑期多校训练营(第三场)
收获
- 若排列 $p$ 满足 $p_{p_i}=i$,那么 $p$ 是由序列 $\{1,2,\cdots,n\}$ 选出 $\frac{n}{2}$ 对两两交换得到的
- 类似于合并两个
vector
的操作时考虑按秩合并
A Clam and Fish
贪心,只要有鱼就一定捕,因为捕蛤蜊最后还是要用来换鱼,不如现在就捕,所以就只需要考虑没有鱼的情况。没有鱼的情况下,遇到蛤蜊就先存起来,遇到没有蛤蜊的池塘,如果有库存的蛤蜊就用,到最后剩下一些蛤蜊,说明这些蛤蜊捕一半就够了,另一半用来诱鱼。
1 |
|
B Classical String Problem
根据题设变换,任意时刻这个字符串一定是从某一位置开始循环填 $s_1,s_2,\cdots,s_n$ 的形式,因此只需要记录好 $s_1$ 在当前时刻的位置即可。
1 |
|
C Operation Love
把凸包的边长搞出来,如果逆时针方向 $9$ 后面是 $8$ 或者顺时针方向 $9$ 后面是 $6$,那么就是右手;否则左手。
值得注意的是,这道题的精度开低点就够了。
P.S. 根本不用求出凸包……但是复制粘贴模板不香吗(大雾
1 |
|
D Points Construction Problem
首先,$m>4n$ 或者 $m$ 是奇数无解。其次,$m$ 的下限是将 $n$ 个黑点组成尽可能方正的矩形缺一个角的形式后的匹配数(例如,$n=11$ 就是一个 $3\times4$ 的矩形缺一个角的形式,此时 $m_\min=14$),当 $m$ 小于这个下限时无解。其他情况有解。
考虑有解时如何构造。我们可以从 $m_\min$ 开始,即刚才所说的“尽可能方正的矩形缺角”。每次从里面拆出来一个点丢到很远的地方,那么分情况我们的匹配数会 $+2$ 或 $+4$(一列一列地丢,如果丢某个点后这一列刚好丢完,那么匹配数 $+2$;否则 $+4$;另外只有一列的时候是 $+2$)。一直丢到匹配数 $\geqslant m$ 的时候,如果是等于,那么我们找到了一个解;如果是大于,只可能是大 $2$,所以取一个丢出去的点加到矩形旁边就好。
1 |
|
E Two Matchings
这道题需要转换一长串。。。首先 $p_{p_i}=i$ 意味着 $p$ 序列是由序列 $\{1,2,\cdots,n\}$ 选出 $\frac{n}{2}$ 对两两交换得到的,而 $p$ 和 $q$ 是 combinable 的意味着得到 $p$ 和 $q$ 的时候不能选出相同的一对。又 $\left|a_i-a_{p_i}\right|$ 其实是选出来的一对数的差的绝对值,故 $p$ 序列的代价 $\frac{1}{2}\sum\limits_{i=1}^n\left|a_i-a_{p_i}\right|$ 其实就是选出来的所有对的差的绝对值之和。
于是题意转化成了:给定 $a$ 数组,找两种不同的配对方式(所谓不同,要求没有任何一对数同时出现在两个配对方式中),使得两种配对方式的代价和最小。一种配对方式的代价是所有数对的差的绝对值之和。
显然,我们要找的两种配对方式就是代价最小的和次小的两种配对方式。我们可能会怀疑把最小的配对方式代价增大、而次小的配对方式代价减小是否可行,但是这样答案不会更优:因为把更改了最小的配对方式的那些点拿出来,它们在次小配对方式中一定以最小的代价配对的,于是我们只需要把它们在两个配对方式中交换,就回到了最小配对方式。
代价最小的配对方式很简单,即 $\{(a_i,a_{i+1})\mid i=2k+1\}$,考虑差分序列即可证明。问题主要是代价次小的配对方式。
为了不和最小匹配方式有相同的数对,当 $n=4$ 时,我们只有一种配对方式(其实是两种,但是本质相同),同样的,当 $n=6$ 时,我们也只有一种配对方式;而当 $n\geqslant8$ 时,我们就可以从 $n-4$ 和 $n-6$ 分两种方式转移了,所以这就是一个 $\text{dp}$。$\text{dp}$ 求出次小配对方式后,两代价相加即是答案。
1 |
|
F Fraction Construction Problem
- 若 $(a,b)\neq1$,设 $g=\gcd(a,b)$,那么构造 $\frac{\frac{a}{g}+1}{\frac{b}{g}}-\frac{1}{\frac{b}{g}}=\frac{a}{b}$ 即可;
- 若 $(a,b)=1$ 且 $b$ 只有不多于一种质因子,那么不可能。因为:设 $b=p^k$,那么通分后分母 $df=b=p^k$,但是题设 $d,f<b$,所以不可能;
- 若 $(a.b)=1$ 且 $b$ 可分解为两个互质的数的乘积,那我们就设 $d$ 和 $f$ 是这两个互质的因子,即 $df=b$。于是通分后分子有:$cf-de=a$,已知 $d,f,a$,解 $c,e$,扩欧即可。
1 |
|
G Operating on a Graph
对每个点维护一个 vector<int> bd
,存储与以该点为代表元素的 group 相邻而不属于这个 group 的点。每次操作就模拟一下,把与 $o$ 点相邻的 group 的所有 vector
合并起来,注意按秩合并避免超时。
1 |
|
L Problem L is the Only Lovely Problem
签到题
1 |
|
2020牛客暑期多校训练营(第三场)
http://xyfjason.github.io/blog-xcpc/2020/07/18/2020牛客暑期多校训练营(第三场)/