本题要求通过最多 k 次相邻交换操作,使得最终得到的 0/1 序列字典序最小。
为了最小化字典序,我们需要尽可能地将 0 移动到序列的前面,因为 0 比 1 小,更靠前的 0 能让整个序列更优。
可采用贪心策略:
cnt,记录在当前位置前已经遇到的 1 的个数(这些 1 在将 0 前移时会成为“障碍”)。'1',则 cnt 加 1。有 n 个排成一行的格子,每个格子里有一个数字,只能是 0 或 1。 一次操作可以选择两个相邻的格子,交换它们中的数字。你最多可以进行 k 次操作。 我们希望最终得到的数字序列在如下规则下尽可能小:从左到右依次比较每一个格子里的数字,一旦发现不同,数字为 0 的序列更小;如果所有格子都相同,则两个序列相等。 请你求出经过不超过 k 次操作后,能得到的满足上述规则的最优序列。
约束:n≤105,k≤109。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.