結果

問題 No.3016 ハチマキおじさん
ユーザー さかさのさかな
提出日時 2025-01-25 13:40:16
言語 Java
(openjdk 23)
結果
AC  
実行時間 1,306 ms / 2,000 ms
コード長 1,232 bytes
コンパイル時間 3,512 ms
コンパイル使用メモリ 82,820 KB
実行使用メモリ 77,848 KB
最終ジャッジ日時 2025-01-25 22:55:15
合計ジャッジ時間 29,445 ms
ジャッジサーバーID
(参考情報)
judge11 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 31
権限があれば一括ダウンロードができます

ソースコード

diff #

import java.util.*;

public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[] oji = new int[n];
		int[] gaki = new int[n - 1];
		int[] f = new int[n];
		int[] b = new int[n];
		for(int i = 0;i < n;i++) {
			oji[i] = sc.nextInt();
		}for(int i = 0;i < n - 1;i++) {
			gaki[i] = sc.nextInt();
		}Arrays.sort(oji);
		Arrays.sort(gaki);
		//前からi人までに渡したときの総和
		for(int i = 1;i <= n - 1;i++) {
			f[i] = f[i - 1] + Math.abs(oji[i - 1] - gaki[i - 1]);
		}//後ろからi人
		for(int i = 1;i <= n - 1;i++) {
			b[i] = b[i - 1] + Math.abs(gaki[n - i - 1] - oji[n - i]);
		}long min = Long.MAX_VALUE;
		TreeSet<Integer> rem = new TreeSet<>();
		for(int i = 0;i <= n - 1;i++) {
			long sum = f[i] + b[n - 1 - i];
			//System.out.println(f[i] + " " + b[n - 1 - i]);
			//System.out.println(sum);
			if(sum < min) {
				min = sum;
				rem = new TreeSet<>();
				rem.add(oji[i]);
			}else if(sum == min) {
				rem.add(oji[i]);
			}
		}StringBuilder sb = new StringBuilder();
		for(int s:rem) {
			sb.append(s + " ");
		}System.out.println(rem.size());
		System.out.print(sb);
	}

}
0