結果
問題 | No.315 世界のなんとか3.5 |
ユーザー |
![]() |
提出日時 | 2020-05-05 19:22:04 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 455 ms / 2,000 ms |
コード長 | 1,644 bytes |
コンパイル時間 | 87 ms |
コンパイル使用メモリ | 12,800 KB |
実行使用メモリ | 15,696 KB |
最終ジャッジ日時 | 2024-06-27 01:13:22 |
合計ジャッジ時間 | 9,308 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 36 |
ソースコード
import sysread = sys.stdin.buffer.readreadline = sys.stdin.buffer.readlinereadlines = sys.stdin.buffer.readlinesMOD = 10**9 + 7A, B, P = readline().split()P = int(P)A = [0, 0, 0, 0, 0] + [int(x) - ord('0') for x in A]B = [0, 0, 0, 0, 0] + [int(x) - ord('0') for x in B]def solve(A, P, include=True):total = 0no_3 = 0cnt = (0, 1, 2, 3, 3, 4, 5, 6, 7, 8)full_use_3 = FalseMOD3 = 3 * MODfor x in A[:-6]:total = (10 * total + x) % MOD3no_3 = (9 * no_3) % MODif not full_use_3:no_3 += cnt[x]full_use_3 |= x == 3n = no_3 * 3no_3 = [n, n, n]x = A[-6]full_use_3 |= 3 in A[:-6]for d in range(x):if full_use_3 or d == 3:continueno_3[(total + d) % 3] += 1total = (total * 10 + x) % MOD3use_3 = (total - sum(no_3)) % MODfull_mod_3 = total % 3U = 0for x in A[-5:]:U = 10 * U + xret = 0for x in range(10**5):if x % P == 0:continueif '3' in str(x):ret += totalelse:ret += use_3 + no_3[(-x) % 3]for x in range(U + include):if x % P == 0:continueif '3' in str(x) or full_use_3:ret += 1else:ret += (full_mod_3 + x) % 3 == 0return retdef solve_naive(A, P, include):N = 0for x in A:N = 10 * N + xret = 0for x in range(N + include):if x % P == 0:continueret += '3' in str(x) or x % 3 == 0return retx = solve(B, P, True) - solve(A, P, False)print(x % MOD)