結果
問題 | No.1644 Eight Digits |
ユーザー |
![]() |
提出日時 | 2021-08-13 21:23:50 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 91 ms / 1,000 ms |
コード長 | 1,412 bytes |
コンパイル時間 | 510 ms |
コンパイル使用メモリ | 82,420 KB |
実行使用メモリ | 77,368 KB |
最終ジャッジ日時 | 2024-10-03 16:52:01 |
合計ジャッジ時間 | 3,516 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 25 |
ソースコード
import collectionsimport itertoolsdef f(c,m):C=len(c)c=[i for i in c]dp=[[] for i in range(1<<C)]dp[0].append(0)for i in range(1<<C):j=bin(i).count('1')for k in range(C):if (i>>k)&1==0:for l in dp[i]:dp[i+2**k].append((l+q[m+k][c[j]])%p)cnt=1for i in collections.Counter(c).values():cnt*=fact[i]t=collections.Counter(dp[-1])return t,cntdef f2(c,m):C=len(c)c=[i for i in c]dp=[[] for i in range(1<<C)]dp[0].append(0)for i in range(1<<C):j=bin(i).count('1')for k in range(C):if (i>>k)&1==0:for l in dp[i]:dp[i+2**k].append((l+q[m+k][c[j]])%p)cnt=1for i in collections.Counter(c).values():cnt*=fact[i]return dp[-1],cntn=8p=int(input())c=[1,1,1,1,1,1,1,1,0]a=[]for i in range(9):for j in range(c[i]):a.append(i+1)all=tuple(itertools.combinations(a,n//2))ans=0q=[[0]*10 for i in range(n+1)]for i in range(n+1):for j in range(10):q[i][j]=pow(10,i,p)*j%pfact=[1]*(n+1)for i in range(1,n+1):fact[i]=fact[i-1]*is=set()for x in all:y=0for i in range(n//2):y+=x[i]*pow(10,i)if y in s:continues.add(y)b=a.copy()for i in x:b.remove(i)d1,n1=f2(x,(n+1)//2)d2,n2=f(b,0)n3=n1*n2num=0for i in d1:if i==0:if 0 in d2:num+=d2[0]elif p-i in d2:num+=d2[p-i]ans+=num//n3print(ans)