結果
| 問題 |
No.1239 Multiplication -2
|
| ユーザー |
|
| 提出日時 | 2020-09-25 23:36:34 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,249 bytes |
| コンパイル時間 | 155 ms |
| コンパイル使用メモリ | 82,064 KB |
| 実行使用メモリ | 106,264 KB |
| 最終ジャッジ日時 | 2024-06-28 08:17:38 |
| 合計ジャッジ時間 | 6,902 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 23 WA * 7 RE * 4 |
ソースコード
import sys
input = lambda : sys.stdin.readline().rstrip()
sys.setrecursionlimit(max(1000, 10**9))
write = lambda x: sys.stdout.write(x+"\n")
n = int(input())
a = list(map(int, input().split()))
ls = []
from collections import deque
l = deque()
flg = False
left = True
right = False
seen0 = False
for num in a:
if num==0:
seen0 = True
if l:
if flg:
left = False
ls.append(list(l))
l = deque()
flg = False
elif (num==2 or num==-2) and flg:
ls.append(list(l))
if seen0:
left = False
while abs(l[0])!=2:
l.popleft()
l.popleft()
l.append(num)
flg = True
elif (num==2 or num==-2):
l.append(num)
flg = True
else:
if seen0:
left = False
l.append(num)
if l:
ls.append(list(l))
right = True
M = 998244353
inv2 = pow(2, M-2, M)
invs = [None]*(n+10)
invs[0] = 1
for i in range(1, n+10):
invs[i] = invs[i-1]*inv2
invs[i] %= M
def sub(l, left=False, right=False):
if 2 in l:
ind = l.index(2)
flg2 = True
else:
ind = l.index(-2)
flg2 = False
e0 = inv2 if (ind>0 or not left) else 1
o0 = 0
e1 = inv2 if (ind<len(l)-1 or not right) else 1
o1 = 0
even = True
for i in range(ind):
if l[ind-i-1]==-1:
even = not even
tmp = invs[i+2] if (i<ind-1 or (not left)) else invs[i+1]
if even:
e0 += tmp
else:
o0 += tmp
even = True
for i in range(len(l)-ind-1):
if l[ind+i+1]==-1:
even = not even
tmp = invs[i+2] if (i<len(l)-ind-2 or (not right)) else invs[i+1]
if even:
e1 += tmp
else:
o1 += tmp
if not flg2:
ans = e0*e1 + o0*o1
else:
ans = e0*o1 + e1*o0
# print(left, right, e0, e1, o0, o1, ans%M)
return ans%M
if len(ls)==0:
ans = 0
elif len(ls)==1:
ans = sub(ls[0], left=left, right=right)
else:
ans = 0
ans += sub(ls[0], left=left)
ans %= M
for i in range(1, len(ls)-1):
ans += sub(ls[i])
ans %= M
ans += sub(ls[-1], right=right)
ans %= M
print(ans%M)