結果
問題 |
No.904 サメトロ
|
ユーザー |
![]() |
提出日時 | 2023-03-08 20:18:47 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 37 ms / 1,000 ms |
コード長 | 1,003 bytes |
コンパイル時間 | 153 ms |
コンパイル使用メモリ | 82,196 KB |
実行使用メモリ | 59,536 KB |
最終ジャッジ日時 | 2024-09-18 02:39:05 |
合計ジャッジ時間 | 2,181 ms |
ジャッジサーバーID (参考情報) |
judge6 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 33 |
ソースコード
# 3つの制約がある # sum(A) = sum(B)、これによりA1とB1の差が決まる # A1_max = sum(B2:)、もちろん下限は0 # B1_max = sum(A2:) # コーナーケースある、(a, b) = (0, 0)以外が複数個なければ答えは1 # さらにA1_min, B1_minもある N = int(input()) sumA, sumB = 0, 0 nonzero = 0 AB = [] for i in range(N-1): a, b = map(int, input().split()) AB.append((a, b)) sumA += a sumB += b if (a, b) != (0, 0): nonzero += 1 A1_max = sumB B1_max = sumA # A1_min, B1_minを探索 A1_min = 0 B1_min = 0 for i in range(N-1): A1_min = max(A1_min, AB[i][1]- (sumA-AB[i][0])) B1_min = max(B1_min, AB[i][0]- (sumB-AB[i][1])) #print(A1_min, B1_min) # 計算式でいけると思うが愚直にやった count = 0 for A1 in range(A1_min, A1_max+1): B1 = A1 + sumA - sumB #print('A1', A1, 'B1', B1, 0 <= B1 <= sumA) if B1_min <= B1 <= B1_max: count += 1 if nonzero <= 1: print(1) else: print(count)