結果
| 問題 |
No.1334 Multiply or Add
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-16 16:04:13 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,954 bytes |
| コンパイル時間 | 508 ms |
| コンパイル使用メモリ | 81,996 KB |
| 実行使用メモリ | 104,576 KB |
| 最終ジャッジ日時 | 2025-04-16 16:10:43 |
| 合計ジャッジ時間 | 7,487 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 51 WA * 20 |
ソースコード
MOD = 10**9 + 7
n = int(input())
a = list(map(int, input().split()))
blocks = []
current_numbers = None
current_ones = None
for num in a:
if num == 1:
if current_numbers is not None:
blocks.append(current_numbers)
current_numbers = None
if current_ones is None:
current_ones = {'is_numbers': False, 'count': 0}
current_ones['count'] += 1
else:
if current_ones is not None:
blocks.append(current_ones)
current_ones = None
if current_numbers is None:
current_numbers = {
'is_numbers': True,
'product_mod': num % MOD,
'count': 1,
'product_ge3': num >= 3
}
else:
current_numbers['product_mod'] = (current_numbers['product_mod'] * num) % MOD
current_numbers['count'] += 1
if current_numbers['count'] >= 2:
current_numbers['product_ge3'] = True
if current_numbers is not None:
blocks.append(current_numbers)
if current_ones is not None:
blocks.append(current_ones)
processed_blocks = []
i = 0
n_blocks = len(blocks)
while i < n_blocks:
current_block = blocks[i]
if current_block['is_numbers']:
processed_blocks.append(current_block)
i += 1
else:
if i == 0 or i == n_blocks - 1:
processed_blocks.append(current_block)
i += 1
else:
prev_block = processed_blocks[-1] if processed_blocks else None
next_block = blocks[i + 1] if (i + 1 < n_blocks) else None
if prev_block and next_block and prev_block['is_numbers'] and next_block['is_numbers']:
if current_block['count'] == 1:
if prev_block['product_ge3'] or next_block['product_ge3']:
merged_product_mod = (prev_block['product_mod'] * next_block['product_mod']) % MOD
merged_block = {
'is_numbers': True,
'product_mod': merged_product_mod,
'count': prev_block['count'] + next_block['count'] + 1,
'product_ge3': True
}
processed_blocks.pop()
processed_blocks.append(merged_block)
i += 2
else:
processed_blocks.append({'is_numbers': False, 'count': 1})
i += 1
else:
processed_blocks.append(current_block)
i += 1
else:
processed_blocks.append(current_block)
i += 1
sum_total = 0
for block in processed_blocks:
if block['is_numbers']:
sum_total = (sum_total + block['product_mod']) % MOD
else:
sum_total = (sum_total + block['count']) % MOD
print(sum_total)
lam6er