結果
| 問題 |
No.120 傾向と対策:門松列(その1)
|
| コンテスト | |
| ユーザー |
htensai
|
| 提出日時 | 2020-05-07 18:34:50 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 662 ms / 5,000 ms |
| コード長 | 1,207 bytes |
| コンパイル時間 | 1,954 ms |
| コンパイル使用メモリ | 79,100 KB |
| 実行使用メモリ | 59,740 KB |
| 最終ジャッジ日時 | 2024-07-03 09:32:50 |
| 合計ジャッジ時間 | 5,344 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 4 |
ソースコード
import java.util.*;
public class Main {
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
StringBuilder sb = new StringBuilder();
for (int j = 0; j < t; j++) {
int n = sc.nextInt();
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < n; i++) {
int x = sc.nextInt();
if (map.containsKey(x)) {
map.put(x, map.get(x) + 1);
} else {
map.put(x, 1);
}
}
int[] counts = new int[n + 1];
for (int x : map.values()) {
counts[x]++;
}
int left = 0;
int right = n / 3 + 1;
while (right - left > 1) {
int m = (left + right) / 2;
if (check(m, counts)) {
left = m;
} else {
right = m;
}
}
sb.append(left).append("\n");
}
System.out.print(sb);
}
static boolean check(int target, int[] counts) {
int count = 0;
for (int i = 1; i < counts.length; i++) {
count += Math.min(target, i) * counts[i];
if (count >= target * 3) {
return true;
}
}
return false;
}
}
htensai