2023牛客多校训练营1
A . Almost Correct
给你一个长度\(n ( 1 \leq n \leq 16)\)的\(01\)串,要求你给出一种排序算法使得长度为\(n\)的\(01\)串中只有该串不能被排好序
此处的排序算法指,一个长度不超过\(120\)的\(pair\)序列,每次把\(pair\)两个位置的数字比较并排序
假设原串有\(cnt\)个\(1\)
我们考虑一条新串,然后先把第一个为\(1\)的位置和其他所有为\(1\)的位置进行交换,这样一来
- 存在原串为\(1\)的位置,新串为\(0\),那么新串该位置不再是\(1\)
- 不存在原串为\(1\)的位置,新串为\(0\),那么新串有其他位置是\(1\)
我们继续将除了原串第一个\(1\)外的所有位置\(log\)和它们后面的所有位置从\(n\)到\(loc+1\)进行交换,然后将第一个\(1\)的位置\(loc\)和\(n-cnt\)到\(loc+1\)进行交换
不难发现,如果存在原串为\(1\)的位置,新串为\(0\),那么原串第一个\(1\)的位置新串此时为\(0\),已经排好
否则新串的\(1\)一定比原串多,我们空出一格再排序即可
C . Carrot Trees
长度为$n ( 1 \leq n \leq 10^6) $ ,$ m ( 1 \leq m \leq 2 \times 10^5 ) $ 次询问,每次询问进行区间加\(x_i\)或区间减\(k\),与往常不同的是,当前值小于\(k\)的项不会做减法,问最多能减去多少个\(k\)
假如每次都强行减去,那么有
线段树分治求解,复杂度\(n\ logn\ logm\)
题解\(n\ logm\)不知道怎么做的,会了再说
L . Tree Permutations
Excrt细节,对于任意两组
否则无解
M . Water
这题其实可以转化为两种操作,喝\(A\)单位的水,喝\(B\)单位的水,吐\(A\)单位的水,吐\(B\)单位的水,每个操作代价为\(2\)
为什么呢,反过来思考,你把\(A\)瓶倒满,将其往\(B\)中倒水,是不是相当于吐出\(B\)单位的水,那么我们可以凑出的水量一定是\(gcd(A,B)\)的倍数
考虑把较多的那一种水喝尽可能多的代价即可
注意,如果某个瓶子的系数为负,答案需要\(-1\),因为瓶子中可以剩水