結果

問題 No.1086 桁和の桁和2
ユーザー tyawanmusityawanmusi
提出日時 2020-01-20 19:39:26
言語 Python3
(3.13.1 + numpy 2.2.1 + scipy 1.14.1)
結果
AC  
実行時間 2,369 ms / 3,000 ms
コード長 896 bytes
コンパイル時間 294 ms
コンパイル使用メモリ 12,544 KB
実行使用メモリ 26,476 KB
最終ジャッジ日時 2024-07-22 17:37:36
合計ジャッジ時間 40,609 ms
ジャッジサーバーID
(参考情報)
judge5 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 5
other AC * 31
権限があれば一括ダウンロードができます

ソースコード

diff #

mod = 10**9 + 7
n = int(input())
l = list(map(int, input().split()))
r = list(map(int, input().split()))
d = list(map(int, input().split()))

def calc(l, r, di, dj):
  #(10^l <= a < 10^r or a=0) and f(di+f(a))=djを満たすaの数
  if dj == 0:
    if di == 0:
      #di==dj==0のとき、a=0の1通りのみ
      return 1
    else:
      #di!=dj==0のとき、条件を満たすaは存在しない
      return 0
  else:
    #aの総数は(10^r - 10^l)/9で一般化される
    #di==djの時、a=0の1通りが加算される
    ans_r = pow(10, r, mod) * pow(9, mod - 2, mod)#逆元です
    ans_l = pow(10, l, mod) * pow(9, mod - 2, mod)
    ans=(ans_r + (mod - ans_l)) % mod
    if di == dj:
      ans += 1
      ans %= mod#これ必要ですか?
    return ans

ans = calc(l[0], r[0], 0, d[0])
for i in range(1, n):
    ans *= calc(l[i], r[i], d[i - 1], d[i])
    ans %= mod

print(ans)
0