結果
問題 |
No.568 じゃんじゃん 落とす 委員会
|
ユーザー |
![]() |
提出日時 | 2025-04-15 21:48:02 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,602 bytes |
コンパイル時間 | 358 ms |
コンパイル使用メモリ | 81,900 KB |
実行使用メモリ | 147,868 KB |
最終ジャッジ日時 | 2025-04-15 21:49:24 |
合計ジャッジ時間 | 4,985 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | TLE * 1 -- * 25 |
ソースコード
import bisect def main(): import sys input = sys.stdin.read().split() idx = 0 N = int(input[idx]) idx += 1 M = int(input[idx]) idx += 1 participants = [] ai_values = set() bi_values = set() C_ge2 = 0 C_ge3 = 0 C_x0 = 0 C_x1 = 0 C_x2 = 0 for _ in range(N): xi = int(input[idx]) idx += 1 ai = int(input[idx]) idx += 1 bi = int(input[idx]) idx += 1 participants.append((xi, ai, bi)) ai_values.add(ai) bi_values.add(bi) if xi >= 3: C_ge3 += 1 C_ge2 += 1 elif xi == 2: C_ge2 += 1 C_x2 += 1 elif xi == 1: C_x1 += 1 else: C_x0 += 1 ai_values.add(0) ai_values.add(100001) SA_candidates = sorted(ai_values) bi_values.add(0) bi_values.add(100001) SB_candidates = sorted(bi_values) min_count3 = float('inf') for SA in SA_candidates: B1_notA = [] B0_A = [] B2_notA = [] B1_A = [] K2_A = 0 for xi, ai, bi in participants: A_ok = ai >= SA if xi == 1: if not A_ok: B1_notA.append(bi) else: B1_A.append(bi) elif xi == 0: if A_ok: B0_A.append(bi) elif xi == 2: if not A_ok: B2_notA.append(bi) else: K2_A += 1 B1_notA.sort() B0_A.sort() B2_notA.sort() B1_A.sort() K1_A = len(B1_A) count_2_base = (C_ge2) + K1_A left = 0 right = len(SB_candidates) - 1 best_SB = -1 while left <= right: mid = (left + right) // 2 SB = SB_candidates[mid] cnt_B1_notA = len(B1_notA) - bisect.bisect_left(B1_notA, SB) cnt_B0_A = len(B0_A) - bisect.bisect_left(B0_A, SB) current_count2 = count_2_base + cnt_B1_notA + cnt_B0_A if current_count2 >= M: best_SB = SB left = mid + 1 else: right = mid - 1 if best_SB == -1: continue cnt_B2_notA = len(B2_notA) - bisect.bisect_left(B2_notA, best_SB) cnt_B1_A = len(B1_A) - bisect.bisect_left(B1_A, best_SB) count3 = C_ge3 + K2_A + cnt_B2_notA + cnt_B1_A if count3 < min_count3: min_count3 = count3 print(min_count3) if __name__ == '__main__': main()