結果

問題 No.21 平均の差
ユーザー ゴリポン先生ゴリポン先生
提出日時 2024-08-22 09:55:51
言語 D
(dmd 2.106.1)
結果
WA  
実行時間 -
コード長 832 bytes
コンパイル時間 7,459 ms
コンパイル使用メモリ 216,960 KB
実行使用メモリ 6,940 KB
最終ジャッジ日時 2024-08-22 09:56:00
合計ジャッジ時間 8,500 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
6,812 KB
testcase_01 AC 2 ms
6,812 KB
testcase_02 AC 1 ms
6,940 KB
testcase_03 AC 1 ms
6,940 KB
testcase_04 AC 1 ms
6,940 KB
testcase_05 AC 2 ms
6,940 KB
testcase_06 WA -
testcase_07 AC 2 ms
6,940 KB
testcase_08 AC 1 ms
6,940 KB
testcase_09 AC 1 ms
6,940 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;
			else if (min > m)
				min = m;
		}
	}
	// 答えの出力
	writeln(ceil(max - min));
}
0