排列二进制字符串以获得索引范围内的最大值 C/C++?

cc++server side programmingprogramming

如果给定的字符串仅由 0 和 1 组成,则我们给出 M 个不相交的范围 A、B(A <= B),更具体地说是 [A1, B1]、[A2, B2]、……、[AM, BM],这些区间中的任意两个不正式重叠 — 在每个有效的 i、j 的情况下,如果 i!=j,则 Ai<Bj 或 Bj<Ai。

活动是找到一个合法或有效的排列,该排列将同时满足以下两个条件 −

  • 所有 M 个给定范围之间的数字之和将最大。

  • 该字符串将按字典顺序最大。字符串 1100 在字典顺序上高于字符串 1001。

示例

输入
11100
3
3 4
5 5
输出
00111
首先,我们将 1 放在位置 3 和 4 中,然后将 1 放在位置 5 中,因为没有剩余的 1,所以形成的字符串是 00111。
输入
0000111
2
1 1
1 2
输出
1110000

在上面的例子中,我们首先将 1 放在第 1 和第 2 个位置,然后我们有另一个"1"左,

因此,我们使用它按字典顺序最大化字符串,并将其放在第 3 位,这样重新排列就完成了。


相关文章