在 C/C++ 中如何對二進位制字串進行排列以在指定索引範圍內獲得最大值?


假設給定一個僅包含 0 和 1 的字串,我們有 M 個不重疊的範圍 A、B(A <= B),更具體地說是 [A1, B1]、[A2, B2]、…、[AM, BM]。這些區間中的任意兩個都不重疊——正式地說,對於每個有效的 i、j,如果 i!=j,則要麼 Ai

任務是找到一個合法的或有效的排列,該排列將同時滿足以下兩個條件:

  • 所有 M 個給定範圍內的數字之和最大。

  • 字串在字典序上最大。字串 1100 在字典序上高於字串 1001。

示例

Input
11100
3
3 4
5 5
Output
00111
First we put 1’s in position 3 and 4 then in 5 as there are no 1’s left, the string formed is 00111.
Input
0000111
2
1 1
1 2
Output
1110000

在上面的例子中,我們首先在第 1 和第 2 個位置放 1,然後我們還有另一個 '1' 剩餘,

因此,我們用它來在字典序上最大化字串,並將它放在第 3 個位置,從而完成重排。

更新於: 2020年1月29日

225 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告