Loading

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\)一定比原串多,我们空出一格再排序即可

Code

C . Carrot Trees

长度为$n ( 1 \leq n \leq 10^6) $ ,$ m ( 1 \leq m \leq 2 \times 10^5 ) $ 次询问,每次询问进行区间加\(x_i\)或区间减\(k\),与往常不同的是,当前值小于\(k\)的项不会做减法,问最多能减去多少个\(k\)

假如每次都强行减去,那么有

\[该点成功减去的次数=\lfloor \frac {该点减法次数 \times \ k + 该点最小值}{k} \rfloor \]

线段树分治求解,复杂度\(n\ logn\ logm\)

Code

题解\(n\ logm\)不知道怎么做的,会了再说

L . Tree Permutations

Excrt细节,对于任意两组

\[余数1 \% gcd(模数1,模数2) = 余数2 \% gcd(模数1,模数2) \]

否则无解

M . Water

这题其实可以转化为两种操作,喝\(A\)单位的水,喝\(B\)单位的水,吐\(A\)单位的水,吐\(B\)单位的水,每个操作代价为\(2\)

为什么呢,反过来思考,你把\(A\)瓶倒满,将其往\(B\)中倒水,是不是相当于吐出\(B\)单位的水,那么我们可以凑出的水量一定是\(gcd(A,B)\)的倍数

考虑把较多的那一种水喝尽可能多的代价即可

注意,如果某个瓶子的系数为负,答案需要\(-1\),因为瓶子中可以剩水

posted @ 2023-08-30 01:23  Linxrain  阅读(15)  评论(0编辑  收藏  举报