Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

인덱스 범위 내에서 최대값을 얻기 위해 이진 문자열을 정렬 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을 1위와 2위 위치에 놓고 또 다른 '1'을 남겼습니다.

그래서 사전순으로 문자열을 최대화하기 위해 사용하고 3번째 위치에 넣으면 재정렬이 완료됩니다.