結果
問題 | No.1631 Sorting Integers (Multiple of K) Easy |
ユーザー |
![]() |
提出日時 | 2021-07-30 22:51:22 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 670 ms / 3,000 ms |
コード長 | 943 bytes |
コンパイル時間 | 139 ms |
コンパイル使用メモリ | 81,792 KB |
実行使用メモリ | 124,148 KB |
最終ジャッジ日時 | 2024-09-16 02:27:56 |
合計ジャッジ時間 | 6,056 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge6 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 28 |
ソースコード
N,mod=map(int,input().split())C=list(map(int,input().split()))A=[]for i in range(9):for j in range(C[i]):A.append(i+1)ANS=0M=(N+1)>>1L=N>>1P=[pow(10,i,mod) for i in range(N+1)]DP=[dict() for i in range(1<<N)]DP[0][0]=1for i in range(1<<N):c=bin(i).count('1')if c>=M:continuefor j in range(N):if (i>>j)&1:continueif j>0 and A[j-1]==A[j] and (i>>(j-1))&1==0:continuefor k in DP[i].keys():DP[i|(1<<j)][(k*10+A[j])%mod]=DP[i][k]+DP[i|(1<<j)].get((k*10+A[j])%mod,0)for i in range(1<<N):c=bin(i).count('1')if c==L:x=((1<<N)-1)^iy=[0]*10for j in range(9):y[j+1]=y[j]+C[j]z=0p=0for k in range(N):while y[p]==k:p+=1if (x>>k)&1:z|=(1<<y[p-1])y[p-1]+=1x=zif len(DP[x])>0 and len(DP[i])>0:for j in DP[i].keys():y=DP[x].get((-j*P[N-c])%mod,0)ANS+=y*DP[i][j]print(ANS)