結果
| 問題 |
No.3285 Chorus with Friends
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-09-22 18:42:59 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,474 bytes |
| コンパイル時間 | 295 ms |
| コンパイル使用メモリ | 82,536 KB |
| 実行使用メモリ | 586,376 KB |
| 最終ジャッジ日時 | 2025-09-22 18:43:04 |
| 合計ジャッジ時間 | 5,294 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 31 RE * 8 MLE * 1 |
ソースコード
MOD=998244353
def solve(a):
n=len(a)
if n==0:
return 0
m=len(a[0])
if True:
dp=[0]*(1<<n)
dp[-1]=1
for i in range(m):
ndp=[0]*(1<<n)
for j in range(1<<n):
dp[j]%=MOD
if dp[j]==0:
continue
for k in range(n):
nxt=1
if i==m-1 or a[k][i+1]!=a[0][0]:
nxt=0
if (j>>k)&1:
ndp[j-(1<<k)+(nxt<<k)]+=dp[j]
dp=ndp
return sum(dp)
else:
dp=[[0]*(1<<m) for i in range(m+1)]
dp[0][0]=1
for i in range(n):
for j in range(m):
for k in range(1<<m):
dp[j][k]%=MOD
if dp[j][k]==0:
continue
dp[j+1][k]+=dp[j][k]
if ((k>>j)&1)==0:
if j==m-1 or a[i][j+1]!=a[0][0]:
dp[m][k+(1<<j)]+=dp[j][k]
else:
dp[j+1][k+(1<<j)]+=dp[j][k]
dp=[dp[-1][:]]+[[0]*(1<<m) for i in range(m)]
return dp[0][-1]
return 0
N,M=map(int,input().split())
A=[list(map(int,input().split())) for i in range(N)]
ans=0
for i in range(301):
a=[]
for j in range(N):
if A[j][0]==i:
a.append(A[j][:])
ans+=solve(a)
ans%=MOD
print(ans)