結果
問題 | No.451 575 |
ユーザー | ヒッキープログラミングするスレ GitHub ガチ |
提出日時 | 2016-12-02 04:45:26 |
言語 | Python3 (3.12.2 + numpy 1.26.4 + scipy 1.12.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,215 bytes |
コンパイル時間 | 147 ms |
コンパイル使用メモリ | 12,672 KB |
実行使用メモリ | 22,056 KB |
最終ジャッジ日時 | 2024-05-09 18:30:43 |
合計ジャッジ時間 | 9,687 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | WA | - |
testcase_01 | WA | - |
testcase_02 | AC | 26 ms
10,880 KB |
testcase_03 | WA | - |
testcase_04 | AC | 25 ms
10,880 KB |
testcase_05 | AC | 40 ms
10,880 KB |
testcase_06 | AC | 76 ms
11,648 KB |
testcase_07 | AC | 307 ms
15,616 KB |
testcase_08 | WA | - |
testcase_09 | WA | - |
testcase_10 | WA | - |
testcase_11 | WA | - |
testcase_12 | WA | - |
testcase_13 | WA | - |
testcase_14 | AC | 27 ms
10,880 KB |
testcase_15 | AC | 34 ms
11,008 KB |
testcase_16 | AC | 69 ms
11,520 KB |
testcase_17 | WA | - |
testcase_18 | AC | 293 ms
15,616 KB |
testcase_19 | AC | 199 ms
13,952 KB |
testcase_20 | WA | - |
testcase_21 | WA | - |
testcase_22 | WA | - |
testcase_23 | WA | - |
testcase_24 | WA | - |
testcase_25 | WA | - |
testcase_26 | AC | 29 ms
11,008 KB |
testcase_27 | AC | 27 ms
10,752 KB |
testcase_28 | WA | - |
testcase_29 | WA | - |
testcase_30 | WA | - |
testcase_31 | AC | 24 ms
10,752 KB |
testcase_32 | AC | 112 ms
12,416 KB |
ソースコード
n = int(input()) b = [0] + [int(input()) for _ in range(n)] # i is odd # b(i) = a(i) + a(i + 1) # b(i + 1) = a(i + 1) - a(i + 2) # -> a(i + 1) = b(i + 1) + a(i + 2) # b(i) = a(i) + (b(i + 1) + a(i + 2)) # -> a(i + 2) = b(i) - b(i + 1) - a(i) # i -> i - 2 # a(i) = b(i - 2) - b(i - 1) - a(i - 2) # apply # a(3) = b(1) - b(2) - a(1) > 0 # -> a(1) < b(1) - b(2) = G_odd(3) # a(5) = b(3) - b(4) - a(3) # = b(3) - b(4) - (b(1) - b(2) - a(1)) # = b(3) - b(4) - b(1) + b(2) + a(1) > 0 # -> L_odd(5) = b(1) - b(2) - b(3) + b(4) < a(1) # a(7) = b(5) - b(6) - a(5) # = b(5) - b(6) - (b(3) - b(4) - b(1) + b(2) + a(1)) # = b(5) - b(6) - b(3) + b(4) + b(1) - b(2) - a(1) > 0 # -> a(1) < b(1) - (2) - b(3) + b(4) + b(5) - b(6) = G_odd(7) # repeat then ... max(L_odd) < a(1) < min(G_odd) # if min(G_odd) - max(L_odd) > 1, a(1) is exist, otherwise not # j is even # b(j) = a(j) - a(j + 1) # b(j + 1) = a(j + 1) + a(j + 2) # -> a(j + 1) = b(j + 1) - a(j + 2) # b(j) = a(j) - (b(j + 1) - a(j + 2)) # -> a(j + 2) = b(j) + b(j + 1) - a(j) # j -> j - 2 # a(j) = b(j - 2) + b(j - 1) - a(j - 2) # apply # a(4) = b(2) + b(3) - a(2) > 0 # -> a(2) < b(2) + b(3) = G_even(4) # a(6) = b(4) + b(5) - a(4) # = b(4) + b(5) - (b(2) + b(3) - a(2)) # = b(4) + b(5) - b(2) - b(3) + a(2) > 0 # -> L_even(6) = b(2) + b(3) - b(4) - b(5) < a(2) # repeat then ... max(L_even) < a(2) < min(G_odd) # if min(G_even) - max(L_even) > 1, a(2) is exist, otherwise not L_odd = 0 G_odd = 10 ** 18 + 1 tmp = 0 for i in range(3, n + 1, 2): tmp = b[i - 2] - b[i - 1] - tmp if ((i - 3) // 2) % 2 == 0: G_odd = min(G_odd, tmp) else: L_odd = max(L_odd, -tmp) L_even = 0 G_even = 10 ** 18 + 1 tmp = 0 for j in range(4, n + 1, 2): tmp = b[j - 2] + b[j - 1] - tmp if ((j - 4) // 2) % 2 == 0: G_even = min(G_even, tmp) else: L_even = max(L_even, -tmp) a1 = L_odd + 1 a2 = L_even + 1 if a1 < G_odd and a2 < G_even and min(b[1::2]) > 1: a = [0, a1, a2] for k in range(3, n + 2): if k % 2 == 0: a.append(b[k - 2] + b[k - 1] - a[k - 2]) else: a.append(b[k - 2] - b[k - 1] - a[k - 2]) print(n + 1, *a[1:], sep='\n') else: print(-1)