結果
問題 |
No.1106 🦉 何事もバランスが大事
|
ユーザー |
![]() |
提出日時 | 2020-07-04 04:11:33 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 68 ms / 2,000 ms |
コード長 | 1,065 bytes |
コンパイル時間 | 563 ms |
コンパイル使用メモリ | 82,600 KB |
実行使用メモリ | 73,824 KB |
最終ジャッジ日時 | 2024-09-17 09:27:25 |
合計ジャッジ時間 | 7,279 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 77 |
ソースコード
n = int(input()) m = 27 base = [2] * m lim_up = [2] * m # lim_down = [2] * m x = n for i in range(m): x += 2 lim_up[i] = x%5 # lim_down[i] = 4 - lim_up[i] x //= 5 lim_up = lim_up[::-1] # dp[i][j] *= i桁目まで見て、各桁の合計数がjのやつの個数 dp_0 = [[0]*(m*4+1) for _ in range(m+1)] dp = [[0]*(m*4+1) for _ in range(m+1)] dp_lim = [[0]*(m*4+1) for _ in range(m+1)] dp_0[0][0] = 1 dp_lim[0][0] = 1 phase = 0 for i in range(1,m+1): dp_0[i][i*2] = 1 lim_j = sum(lim_up[:i]) dp_lim[i][lim_j] = 1 if(lim_j != i*2)&(phase==0): phase = 1 for j in range(m*4+1): dp[i][j] = sum(dp[i-1][max(0,j-4):j+1]) if(phase==1): for k in range(3,lim_up[i-1]): dp[i][j] += dp_lim[i-1][j-k] elif(phase==2): for k in range(lim_up[i-1]): dp[i][j] += dp_lim[i-1][j-k] for k in range(3,5): dp[i][j] += dp_0[i-1][j-k] if(lim_j != i*2)&(phase==1): phase = 2 ans = dp[i][2*m] + dp_lim[i][2*m] print(ans)