結果
| 問題 |
No.1426 Got a Covered OR
|
| コンテスト | |
| ユーザー |
あかりき
|
| 提出日時 | 2021-03-12 22:36:24 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 249 ms / 2,000 ms |
| コード長 | 1,132 bytes |
| コンパイル時間 | 169 ms |
| コンパイル使用メモリ | 82,300 KB |
| 実行使用メモリ | 110,720 KB |
| 最終ジャッジ日時 | 2024-10-14 13:10:01 |
| 合計ジャッジ時間 | 3,874 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 24 |
ソースコード
def cmb(n,r,mod):
if r<0 or r>n:
return 0
r=min(r,n-r)
return g1[n]*g2[r]*g2[n-r]%mod
n=int(input())
b=list(map(int,input().split()))
mod=10**9+7
g1=[1,1]
g2=[1,1]
inverse=[0,1]
for i in range(2,n+1):
g1.append((g1[-1]*i)%mod)
inverse.append((-inverse[mod%i]*(mod//i))%mod)
g2.append((g2[-1]*inverse[-1])%mod)
for i in range(n):
if b[i]!=-1:
b[i]=format(b[i],'032b')
b=[format(0,'032b')]+b
inv2=pow(2,mod-2,mod)
ct=1
ans=1
p=b[0]
for i in range(1,n+1):
if b[i]==-1:
ct+=1
else:
ct00=0;ct01=0;ct11=0
for j in range(32):
if p[j]=='1' and b[i][j]=='0':
print(0)
exit()
elif p[j]=='0' and b[i][j]=='0':
ct00+=1
elif p[j]=='0' and b[i][j]=='1':
ct01+=1
else:
ct11+=1
x=pow(2,ct,mod)
y=pow(x,ct11,mod)
z=pow(x-1,ct01,mod)
a=(y*z%mod)
for j in range(1,ct+1):
x*=inv2
x%=mod
y=pow(x,ct11,mod)
z=pow(x-1,ct01,mod)
w=y*z
if j%2==1:
a-=(w*cmb(ct,j,mod)%mod)
else:
a+=(w*cmb(ct,j,mod)%mod)
a%=mod
ans*=a
ans%=mod
ct=1
p=b[i]
print(ans)
あかりき