結果
| 問題 |
No.1334 Multiply or Add
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-15 22:40:10 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,601 bytes |
| コンパイル時間 | 189 ms |
| コンパイル使用メモリ | 81,696 KB |
| 実行使用メモリ | 106,080 KB |
| 最終ジャッジ日時 | 2025-04-15 22:41:45 |
| 合計ジャッジ時間 | 6,302 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 58 WA * 13 |
ソースコード
MOD = 10**9 + 7
def main():
import sys
input = sys.stdin.read().split()
n = int(input[0])
a = list(map(int, input[1:n+1]))
elements = []
i = 0
while i < n:
if a[i] == 1:
count = 0
while i < n and a[i] == 1:
count += 1
i += 1
elements.append(('1-group', count))
else:
product = 1
while i < n and a[i] != 1:
product = (product * a[i]) % MOD
i += 1
elements.append(('run', product))
stack = []
for elem in elements:
if elem[0] == 'run':
current_run = elem[1]
while True:
if len(stack) >= 2 and stack[-2][0] == 'run' and stack[-1][0] == '1-group':
prev_run = stack[-2][1]
k = stack[-1][1]
merged_run = (prev_run * current_run) % MOD
original_sum = (prev_run + k + current_run) % MOD
if merged_run > original_sum:
stack.pop()
stack.pop()
current_run = merged_run
else:
break
else:
break
stack.append(('run', current_run))
else:
stack.append(elem)
total = 0
for elem in stack:
if elem[0] == 'run':
total = (total + elem[1]) % MOD
else:
total = (total + elem[1]) % MOD
print(total)
if __name__ == '__main__':
main()
lam6er