結果
問題 | No.904 サメトロ |
ユーザー | FromBooska |
提出日時 | 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 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 36 ms
59,536 KB |
testcase_01 | AC | 34 ms
52,940 KB |
testcase_02 | AC | 34 ms
58,476 KB |
testcase_03 | AC | 33 ms
57,964 KB |
testcase_04 | AC | 35 ms
59,476 KB |
testcase_05 | AC | 31 ms
52,316 KB |
testcase_06 | AC | 37 ms
58,644 KB |
testcase_07 | AC | 32 ms
58,264 KB |
testcase_08 | AC | 34 ms
59,528 KB |
testcase_09 | AC | 33 ms
53,304 KB |
testcase_10 | AC | 35 ms
58,048 KB |
testcase_11 | AC | 33 ms
59,528 KB |
testcase_12 | AC | 30 ms
52,248 KB |
testcase_13 | AC | 30 ms
53,560 KB |
testcase_14 | AC | 32 ms
58,308 KB |
testcase_15 | AC | 30 ms
52,884 KB |
testcase_16 | AC | 33 ms
57,504 KB |
testcase_17 | AC | 29 ms
52,620 KB |
testcase_18 | AC | 30 ms
52,644 KB |
testcase_19 | AC | 31 ms
52,816 KB |
testcase_20 | AC | 30 ms
52,644 KB |
testcase_21 | AC | 32 ms
58,908 KB |
testcase_22 | AC | 34 ms
58,520 KB |
testcase_23 | AC | 33 ms
58,044 KB |
testcase_24 | AC | 34 ms
58,968 KB |
testcase_25 | AC | 30 ms
52,144 KB |
testcase_26 | AC | 33 ms
58,668 KB |
testcase_27 | AC | 34 ms
58,768 KB |
testcase_28 | AC | 30 ms
52,948 KB |
testcase_29 | AC | 30 ms
53,092 KB |
testcase_30 | AC | 32 ms
52,268 KB |
testcase_31 | AC | 33 ms
53,420 KB |
testcase_32 | AC | 30 ms
53,224 KB |
testcase_33 | AC | 30 ms
52,092 KB |
testcase_34 | AC | 31 ms
53,560 KB |
testcase_35 | AC | 32 ms
57,816 KB |
ソースコード
# 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)