排列二进制字符串以获得索引范围内的最大值 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 位,这样重新排列就完成了。