Problem:
MathJax.Hub.Config({
tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}
});

B: ハミング距離 / Hamming Distance

問題文

Leading-zeros を含めた桁数が $N$ の，符号なし $2$ 進数表記された整数 $X$ がある．
$X$ とのハミング距離が $D$ となる $N$ 桁で $2$ 進数表記できる非負整数のうち，
値が最大のものを出力せよ．

$2$ 進数表記された整数間のハミング距離とは，
$2$ つの数において値が異なる桁の数である．例えば $000$ と $110$ のハミング距離は $2$ である．

入力

$N$

$X$

$D$

制約

$1 \leq N \leq 1000$

$0 \leq D \leq N$

入力は全て非負整数である

出力

答えの整数を符号なし $2$ 進数表記で $1$ 行に出力せよ．

サンプル

サンプル入力1

5
00001
3

サンプル出力1

11101

サンプル入力2

7
0110100
4

サンプル出力2

1111111

サンプル入力3

18
110001001110100100
6

サンプル出力3

111111111111100100

サンプル入力4

3
000
0

サンプル出力4

000

Solution in JAVA (judge verdict: Accepted)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

import static java.lang.Integer.parseInt;

/**
 * Hamming Distance
 */
public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String line;
		String[] words;

		int N, D;
		char[] X;

		N = parseInt(br.readLine());
		X = br.readLine().toCharArray();
		D = parseInt(br.readLine());

		char[] ans = Arrays.copyOf(X, N);

		for (int i = 0; i < N; i++) {
			if (D == 0) break;
			if (D > 0 && X[i] == '0') {
				ans[i] = '1';
				D--;
			}
		}

		for (int i = N - 1; i >= 0; i--) {
			if (D == 0) break;
			if (D > 0 && X[i] == '1') {
				ans[i] = '0';
				D--;
			}
		}

		System.out.println(String.valueOf(ans));

	} //end main
}