結果
| 問題 |
No.568 じゃんじゃん 落とす 委員会
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 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()
lam6er