結果
問題 |
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)