TopCoder SRM 646 Div1 Easy: TheConsecutiveIntegersDivOne (全探索・シミュレーション)

解法

昇順にソートし、スタート位置、操作しない数字、増加か減少か、というのを全探索してシミュレーションする。やるだけ。

コード

import java.util.Arrays;

public class TheConsecutiveIntegersDivOne {

	public int find(int[] numbers, int k) {
		Arrays.sort(numbers);

		int min = Integer.MAX_VALUE;

		for (int start = 0; start + k - 1 < numbers.length; start++) {

			for (int q = 0; q < 2; q++) {
				int p = q == 0 ? 1 : -1;

				for (int i = 0; i < k; i++) {
					int first = numbers[i + start] - i * p;
					int ope = 0;
					for (int j = 0; j < k; j++) {
						ope += Math.abs((first + j * p) - numbers[start + j]);
					}
					min = Math.min(min, ope);

				}
			}
		}

		return min;
	}
}