結果

問題 No.190 Dry Wet Moist
コンテスト
ユーザー ゴリポン先生
提出日時 2026-01-18 22:34:04
言語 D
(dmd 2.111.0)
結果
AC  
実行時間 64 ms / 2,000 ms
コード長 969 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 4,875 ms
コンパイル使用メモリ 210,684 KB
実行使用メモリ 14,260 KB
最終ジャッジ日時 2026-01-18 22:34:12
合計ジャッジ時間 7,527 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 28
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

module main;
// https://sugarknri.hatenablog.com/entry/2016/06/30/174033 より
// 貪欲法、尺取り法
import std;

void main()
{
	// 入力
	int N = readln.chomp.to!int * 2;
	auto A = readln.split.to!(long[]);
	// 答えの計算
	A.sort;
	int[] ans;
	//Dryを探す
	int s = 0;
	//一番小さな値a[0]を選んで、それと組にしてDryになる物を大きな値の側から探してくる
	//Dryにできたらlは次へ、結果によらずrは次へ
	for (int l = 0, r = N - 1; l < r; r--)
		if (A[l] < -A[r]) {
			s++, l++;
		}
	ans ~= s;
	//Wetも同様
	s = 0;
	for (int l = 0, r = N - 1; l < r; l++)
		if (A[l] > -A[r]) {
			s++, r--;
		}
	ans ~= s;
	//Moistもやるべき事は同じだが、lとrのどちらを進めるかを考える必要がある
	s = 0;
	for (int l = 0, r = N - 1; l < r;) {
		if (A[l] == -A[r]) { s++; l++; r--; }
		else if (A[l] + A[r] < 0) l++;
		else r--;
	}
	ans ~= s;
	// 答えの出力
	writefln("%(%d %)", ans);
}
0