結果

問題 No.21 平均の差
ユーザー ゴリポン先生ゴリポン先生
提出日時 2024-08-22 09:57:41
言語 D
(dmd 2.106.1)
結果
AC  
実行時間 2 ms / 5,000 ms
コード長 827 bytes
コンパイル時間 7,950 ms
コンパイル使用メモリ 215,408 KB
実行使用メモリ 6,944 KB
最終ジャッジ日時 2024-08-22 09:57:54
合計ジャッジ時間 5,452 ms
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
6,816 KB
testcase_01 AC 1 ms
6,940 KB
testcase_02 AC 1 ms
6,944 KB
testcase_03 AC 2 ms
6,944 KB
testcase_04 AC 1 ms
6,940 KB
testcase_05 AC 1 ms
6,944 KB
testcase_06 AC 1 ms
6,944 KB
testcase_07 AC 2 ms
6,944 KB
testcase_08 AC 1 ms
6,940 KB
testcase_09 AC 1 ms
6,944 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

module main;

import std;

// 集合の分割を列挙する
T[][][] partition(T)(T[] arr, int k)
{
	T[][][] result;
	void backtrack(int start, int k, T[][] currentPartition)
	{
		if (k == 1) {
			result ~= currentPartition ~ [arr[start .. $]];
			return;
		}
		foreach (i; start .. arr.length.to!int - k + 1)
			backtrack(i + 1, k - 1, currentPartition ~ [arr[start .. i + 1]]);
	}
	backtrack(0, k, []);
	return result;
}

void main()
{
	// 入力
	auto N = readln.chomp.to!int;
	auto K = readln.chomp.to!int;
	double[] num;
	foreach (_; 0 .. N) {
		num ~= readln.chomp.to!double;
	}
	// 答えの計算
	double max = -1e10, min = 1e10;
	foreach (p; partition(num, K)) {
		foreach (e; p) {
			double m = e.mean;
			if (max < m)
				max = m;
			if (min > m)
				min = m;
		}
	}
	// 答えの出力
	writeln(ceil(max - min));
}
0