結果
| 問題 | No.1407 Kindness |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-08-02 17:28:26 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
AC
|
| 実行時間 | 213 ms / 2,000 ms |
| + 460µs | |
| コード長 | 1,190 bytes |
| 記録 | |
| コンパイル時間 | 221 ms |
| コンパイル使用メモリ | 95,980 KB |
| 実行使用メモリ | 140,672 KB |
| 最終ジャッジ日時 | 2026-08-02 17:28:41 |
| 合計ジャッジ時間 | 6,903 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge3_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 36 |
ソースコード
MOD = 10**9+7
import sys
sys.set_int_max_str_digits(0)
def main():
N = input()
keta = len(N)
dp = [[[[0] * (2) for _ in range(2)] for _ in range(2)] for _ in range(keta + 1)]
dp[0][0][0][0] = 1
for i in range(keta):
nd = int(N[i])
for j in range(2):
iLim = 9 if j else nd
for k in range(2):
for l in range(2):
val = dp[i][j][k][l]
if val == 0:
continue
for d in range(iLim + 1):
dstj = j | (d < iLim)
dstk = k | (1 if d > 0 else 0)
dstl = l | (k == 1 and d == 0)
if dstk == 0:
dp[i + 1][dstj][dstk][dstl] = 1
else:
dp[i + 1][dstj][dstk][dstl] += val * d
dp[i + 1][dstj][dstk][dstl] %= MOD
last = dp[-1]
ans = 0
for j in range(2):
for k in range(2):
for l in range(2):
ans += last[j][k][l]
ans -= 1
ans %= MOD
print(ans)
if __name__ == "__main__":
main()