CF1348
A:
一个组 \(2^n+2^1+\dots+2^{\frac{n}{2}-1}\),另一个组剩下的。
B:
考虑不停循环。
如果不同的数字超过 \(k\),无解。
否则先把原序列去重,然后把末尾补一些数补成 \(k\) 个,再把这个新序列循环 \(n\) 次。
C:
先把字符们排序。
肯定先把最小的 \(k\) 个字符作为各自的开头。
-
如果前 \(k\) 个就有不同的字符,那么以第 \(k\) 个字符开头的一定是字典序最大的。(因为字符排序了)直接把之后的字符全部丢到其他地方去,答案就是第 \(k\) 个字符。
-
否则:
-
如果这之后的字符都相等,除以一下再加个余数;
-
否则第 \(n\) 个字符肯定比前面的大,我们要让这个字符尽可能往后拖,那么我们把 \(k+1\sim n\) 的字符全部堆到一个字符串上即可。
-
D:
形式化题意:
初始有 \(sum=1,x=1\),每次可以让 \(x=[x,x*2]\) 内的一个数,然后让 \(sum+=x\),最小化操作次数使得 \(sum=k\),\(k\) 给定。
最小化,肯定想着不停乘二乘二。但是可能最后一次时 \(x\) 太大了。
但是没关系,我们可以把最后剩下的一点提到之前加上。
E:
我们可以先令所有 \(a_i=a_i-i\),这样就把上升变成了非降。
这么做的原因是我们不用判断两个锁定的数之间的距离:比如 \(4\) 和 \(7\) 中间隔了三个数,但是要求严格上升,那就不行了。
现在把 \(a_i\) 重新赋值之后,只要两个锁定的不是后面的比前面的小就行。
我们把两个锁定的之间的段抽出来处理。
假设我们现在处理 \((l,r)\)。(也就是 \(l,r\) 这俩被锁定了,我们可以让 \(b_0=0,b_{k+1}=n+1\))
这个段内的所有不在 \([a[l],a[r]]\) 内的数,肯定都要改。剩下在 \([a[l],a[r]]\) 的数内,找出一个最长不降子序列不改,再剩下的改。
LIS 要优化。
注意:不可能成功说明有俩被锁定的本身就不满足非降。