結果
問題 | No.213 素数サイコロと合成数サイコロ (3-Easy) |
ユーザー | yaoshimax |
提出日時 | 2015-05-24 22:17:28 |
言語 | PyPy2 (7.3.15) |
結果 |
AC
|
実行時間 | 1,339 ms / 3,000 ms |
コード長 | 1,493 bytes |
コンパイル時間 | 1,443 ms |
コンパイル使用メモリ | 76,540 KB |
実行使用メモリ | 79,876 KB |
最終ジャッジ日時 | 2024-07-06 08:07:40 |
合計ジャッジ時間 | 3,011 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 498 ms
78,912 KB |
testcase_01 | AC | 1,339 ms
79,876 KB |
ソースコード
N,P,C=map(int,raw_input().split()) dp=[[[0 for i in range(130)] for k in range(6)] for j in range(P+1)] dp[0][0][0]=1 for i in range(P): for j,p in enumerate([2,3,5,7,11,13]): for l in range(j+1): for k in range(p,130): dp[i+1][j][k]+=dp[i][l][k-p] dp2=[[[0 for i in range(130)] for k in range(6)] for j in range(C+1)] for i in range(6): for j in range(130): dp2[0][0][j]+=dp[P][i][j] for i in range(C): for j,p in enumerate([4,6,8,9,10,12]): for l in range(j+1): for k in range(p,130): dp2[i+1][j][k]+=dp2[i][l][k-p] patterns=[0 for i in range(130)] m=0 for j in range(130): for i in range(6): patterns[j]+=dp2[C][i][j] if patterns[j]>0: #print j,patterns[j] m=max(m,j) A=[[0 for i in range(m)] for j in range (m)] for i in range(m-1): A[i][i+1]=1 for i in range(1,m+1): A[i-1][0]=patterns[i] #for i in range(m): # for j in range(m): # print A[i][j], # print V=[0 for i in range(m)] V[0]=1 while(N>0): if N%2==1: nV=[0 for i in range(m)] for i in range(m): for j in range(m): nV[i]+=A[i][j]*V[j] nV[i]%=1000000007 V=nV nA=[[0 for i in range(m)] for j in range(m)] for i in range(m): for j in range(m): for k in range(m): nA[i][j]+=A[i][k]*A[k][j] nA[i][j]%=1000000007 A=nA N/=2 print sum(V)%1000000007