結果
問題 | No.568 じゃんじゃん 落とす 委員会 |
ユーザー |
![]() |
提出日時 | 2025-03-26 15:49:24 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,899 bytes |
コンパイル時間 | 232 ms |
コンパイル使用メモリ | 82,112 KB |
実行使用メモリ | 113,272 KB |
最終ジャッジ日時 | 2025-03-26 15:50:10 |
合計ジャッジ時間 | 4,432 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 13 TLE * 1 -- * 12 |
ソースコード
import bisectdef main():import sysinput = sys.stdin.read().split()idx = 0n, m = int(input[idx]), int(input[idx+1])idx += 2C1 = 0C2_ai_bi = []C3_ai_bi = []C4_ai_bi = []for _ in range(n):xi = int(input[idx])ai = int(input[idx+1])bi = int(input[idx+2])idx +=3if xi >=3:C1 +=1elif xi == 2:C2_ai_bi.append( (ai, bi) )elif xi ==1:C3_ai_bi.append( (ai, bi) )elif xi ==0:C4_ai_bi.append( (ai, bi) )C2_count = len(C2_ai_bi)total_C1C2 = C1 + C2_countif m <= total_C1C2:print(C1)returnneed = m - total_C1C2possible_SA = set()for ai, _ in C3_ai_bi:possible_SA.add(ai)for ai, _ in C4_ai_bi:possible_SA.add(ai)possible_SA = sorted(possible_SA)possible_SA.append(100001 +2)min_increment = float('inf')for SA_candidate in possible_SA:C3_a_list = []C3_not_a_bi = []for ai, bi in C3_ai_bi:if ai >= SA_candidate:C3_a_list.append(bi)else:C3_not_a_bi.append(bi)c3_a = len(C3_a_list)C4_a_bi = [bi for ai, bi in C4_ai_bi if ai >= SA_candidate]need_remaining = need - c3_aif need_remaining <=0:C2_a = sum(1 for ai, _ in C2_ai_bi if ai >= SA_candidate)increment = C2_aif increment < min_increment:min_increment = incrementcontinueC3_not_a_sorted = sorted(C3_not_a_bi)C4_a_sorted = sorted(C4_a_bi)low = 0high = 100001best_x = -1while low <= high:mid = (low + high) //2cnt3 = len(C3_not_a_sorted) - bisect.bisect_left(C3_not_a_sorted, mid)cnt4 = len(C4_a_sorted) - bisect.bisect_left(C4_a_sorted, mid)if cnt3 + cnt4 >= need_remaining:best_x = midlow = mid +1else:high = mid -1if best_x == -1:continueC2_not_a_bi = [bi for ai, bi in C2_ai_bi if ai < SA_candidate]C2_not_a_sorted = sorted(C2_not_a_bi)cnt_c2_not_a = len(C2_not_a_sorted) - bisect.bisect_left(C2_not_a_sorted, best_x)C3_both_sorted = sorted(C3_a_list)cnt_c3_both = len(C3_both_sorted) - bisect.bisect_left(C3_both_sorted, best_x)C2_a = sum(1 for ai, _ in C2_ai_bi if ai >= SA_candidate)increment = C2_a + cnt_c2_not_a + cnt_c3_bothif increment < min_increment:min_increment = incrementif min_increment == float('inf'):print(-1)else:print(C1 + min_increment)if __name__ == "__main__":main()