結果
問題 |
No.1334 Multiply or Add
|
ユーザー |
![]() |
提出日時 | 2025-04-15 22:39:38 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,954 bytes |
コンパイル時間 | 157 ms |
コンパイル使用メモリ | 81,992 KB |
実行使用メモリ | 104,252 KB |
最終ジャッジ日時 | 2025-04-15 22:41:31 |
合計ジャッジ時間 | 7,093 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
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)