結果
| 問題 | No.3486 Draw a Rainbow |
| コンテスト | |
| ユーザー |
titia
|
| 提出日時 | 2026-03-31 05:59:25 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
AC
|
| 実行時間 | 436 ms / 4,000 ms |
| コード長 | 794 bytes |
| 記録 | |
| コンパイル時間 | 115 ms |
| コンパイル使用メモリ | 85,376 KB |
| 実行使用メモリ | 157,184 KB |
| 最終ジャッジ日時 | 2026-03-31 05:59:34 |
| 合計ジャッジ時間 | 7,745 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge2_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 28 |
ソースコード
import sys
input = sys.stdin.readline
mod=998244353
POW2=[1]
for i in range(10**6):
POW2.append(POW2[-1]*2%mod)
N,M,L=list(map(int,input().split()))
S=[[0]*L for i in range(M)]
for i in range(N):
a,b=list(map(int,input().split()))
a-=1
b-=1
b-=M
S[a][b]+=1
DP=[1]*(1<<L)
DP[0]=0
for i in range(M):
X=S[i]
Y=[0]*(1<<L)
for j in range(len(X)):
Y[1<<j]=X[j]
for j in range(L):
for k in range(1<<L):
if k & (1<<j) == 0:
Y[k|(1<<j)]+=Y[k]
for j in range(1<<L):
Y[j]=POW2[Y[j]]-1
for j in range(1<<L):
DP[j]=DP[j]*Y[j]%mod
#print(DP)
for j in range(L):
for k in range(1<<L):
if k & (1<<j) == 0:
DP[k|(1<<j)]-=DP[k]
print(DP[-1]%mod)
titia