結果
問題 | No.315 世界のなんとか3.5 |
ユーザー |
![]() |
提出日時 | 2015-12-09 02:22:55 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,051 bytes |
コンパイル時間 | 248 ms |
コンパイル使用メモリ | 12,928 KB |
実行使用メモリ | 17,272 KB |
最終ジャッジ日時 | 2024-09-14 20:53:58 |
合計ジャッジ時間 | 28,191 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 29 TLE * 1 -- * 6 |
ソースコード
import arraymod = 1000000007a,b,p = input().split()p = int(p)memo = [[[] for col in range(8)] for row in range(10)]def gen_memo():global memofor k in range(10) :for sml in range(2) :for mod3 in range(4) :s = (sml<<2)|mod3nx = [0 for i in range(8)]for d in range(10) :if sml==0 and d>k :continuesml_ = 1 if (d<k or sml==1) else 0mod3_ = 3 if (mod3==3 or d==3) else (mod3+d)%3s_ = (sml_<<2) | mod3_nx[s_] += 1for s_ in range(8) :if nx[s_] > 0 :memo[k][s].append( (s_, nx[s_]) )def calc(x):sz = len(x)dp = [[[0 for col in range(8)] for row in range(p)] for hoge in range(2)]dp[0][0][0] = 1u = 0v = 1for i in range(sz) :k = ord(x[i]) - ord('0')for j in range(1 if i<sz-4 else p):for sml in range(2):for mod3 in range(4):s = (sml<<2)|mod3val = dp[u][j][s]dp[u][j][s] = 0if val == 0:continueif i<sz-5:for c in range(len(memo[k][s])):s_ = memo[k][s][c][0]dp[v][0][ s_ ] += val * memo[k][s][c][1]if dp[v][0][s_] >= mod:dp[v][0][s_] %= modelse:for d in range(10) :if sml==0 and d>k :breaksml_ = 1 if (sml==1 or d<k) else 0mod3_ = 3 if (mod3==3 or d==3) else (mod3+d)%3s_ = (sml_<<2) | mod3_j_ = (j*10 + d) % pdp[v][j_][s_] += valif dp[v][j_][s_] >= mod:dp[v][j_][s_] -= modu,v = v,uret = 0for j in range(p) :if j%p == 0 :continuefor sml in range(2) :for mod3 in range(4) :if mod3==0 or mod3==3:s = (sml<<2)|mod3ret += dp[u][j][s];ret += -mod if ret>=mod else 0return retgen_memo()ans = calc(b)ans = ans - calc(a)ans += mod if ans<0 else 0def hoge():global ansmod3__ = 0modp__ = 0for i in range(len(a)):k = ord(a[i])-ord('0')mod3__ = 3 if mod3__==3 or k==3 else (mod3__ + k)%3modp__ = (modp__ * 10 + k) % pif (mod3__==0 or mod3__==3) and modp__ != 0 :ans += 1ans %= modhoge()print(ans)