結果
問題 | 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 |
ソースコード
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); } }