CF1348

传送门

A:

一个组 \(2^n+2^1+\dots+2^{\frac{n}{2}-1}\),另一个组剩下的。

B:

考虑不停循环。

如果不同的数字超过 \(k\),无解。

否则先把原序列去重,然后把末尾补一些数补成 \(k\) 个,再把这个新序列循环 \(n\) 次。

C:

先把字符们排序。

肯定先把最小的 \(k\) 个字符作为各自的开头。

  1. 如果前 \(k\) 个就有不同的字符,那么以第 \(k\) 个字符开头的一定是字典序最大的。(因为字符排序了)直接把之后的字符全部丢到其他地方去,答案就是第 \(k\) 个字符。

  2. 否则:

    1. 如果这之后的字符都相等,除以一下再加个余数;

    2. 否则第 \(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 要优化。

注意:不可能成功说明有俩被锁定的本身就不满足非降。

posted @ 2024-02-05 14:20  FLY_lai  阅读(1)  评论(0编辑  收藏  举报