結果
問題 | No.1741 Arrays and XOR Procedure |
ユーザー |
![]() |
提出日時 | 2022-06-14 05:18:50 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 1,184 ms / 2,000 ms |
コード長 | 1,264 bytes |
コンパイル時間 | 105 ms |
コンパイル使用メモリ | 12,928 KB |
実行使用メモリ | 24,028 KB |
最終ジャッジ日時 | 2024-10-01 21:01:06 |
合計ジャッジ時間 | 25,784 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 41 |
ソースコード
import sysinput = sys.stdin.readlineN=int(input())B=list(map(int,input().split()))mod=998244353# Lucasの定理# 素数pと非負整数m, nに対して、Combi(m,n) mod pを求める。# https://manabitimes.jp/math/1324# modを取らない二項係数の計算は予め容易しておく。# ここでの実装はパスカルの三角形を使ったもの。Combi=[[] for i in range(100+1)]Combi[0]=[1,0]for i in range(1,100+1):Combi[i].append(1)for j in range(i):Combi[i].append(Combi[i-1][j]+Combi[i-1][j+1])Combi[i].append(0)def p_rep(p,x):ANS=[]for i in range(100):ANS.append(x%p)x//=pif x==0:breakreturn ANSdef Combi_mod_p(m,n,p):ANS=1A=p_rep(p,m)B=p_rep(p,n)for i in range(min(len(A),len(B))):ANS=ANS*Combi[A[i]][B[i]]%preturn ANSONE1=0ONEm1=0ZEROm1=0for i in range(N):if Combi_mod_p(N-1,i,2)==0:if B[i]==-1:ZEROm1+=1else:if B[i]==1:ONE1+=1elif B[i]==-1:ONEm1+=1ANS=pow(2,ZEROm1,mod)if ONEm1==0:if ONE1%2==1:ANS2=1else:ANS2=0else:ANS2=pow(2,ONEm1,mod)*pow(2,mod-2,mod)print(ANS*ANS2%mod)