結果
問題 | No.1741 Arrays and XOR Procedure |
ユーザー |
![]() |
提出日時 | 2021-11-13 11:54:58 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 379 ms / 2,000 ms |
コード長 | 1,495 bytes |
コンパイル時間 | 251 ms |
コンパイル使用メモリ | 82,240 KB |
実行使用メモリ | 103,832 KB |
最終ジャッジ日時 | 2024-11-27 05:26:43 |
合計ジャッジ時間 | 10,420 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 41 |
ソースコード
import sys#input = sys.stdin.readlineinput = sys.stdin.buffer.readlinedef cmb(n,k):if (k<0) or (n<k): return 0ret = 1for i in range(2,n+1):ret *= ifor i in range(2,k+1):ret //= ifor i in range(2,(n-k)+1):ret //= ireturn retdef lucas(n,k,p):nn = []while n > 0:amari = n%pnn.append(amari)n //= pkk = []while k > 0:amari = k%pkk.append(amari)k //= p#足りない長さを補うkk += [0]*(len(nn) - len(kk))ret = 1for i in range(len(nn)):temp = cmb(nn[i],kk[i])%pret = ret*temp%preturn retdef main():n = int(input()); MOD = 998244353B = list(map(int,input().split()))#dp[i][j]:i番目まで見て和が0(偶数)/1(奇数)dp = [1,0]for i in range(n):p = [0,0]p,dp = dp,ppari = lucas(n-1,i,2)if B[i] == 0:dp[0] = p[0]dp[1] = p[1]elif B[i] == 1:if pari == 0:dp[0] = p[0]dp[1] = p[1]else:dp[0] = p[1]dp[1] = p[0]else:if pari == 0:dp[0] = 2*p[0]dp[1] = 2*p[1]else:dp[0] = p[0] + p[1]dp[1] = p[0] + p[1]dp[0] %= MODdp[1] %= MODans = dp[1]print(ans%MOD)if __name__ == '__main__':main()