結果
| 問題 |
No.491 10^9+1と回文
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2017-03-26 12:10:17 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 29 ms / 1,000 ms |
| コード長 | 1,077 bytes |
| コンパイル時間 | 281 ms |
| コンパイル使用メモリ | 12,672 KB |
| 実行使用メモリ | 10,880 KB |
| 最終ジャッジ日時 | 2024-10-01 08:40:11 |
| 合計ジャッジ時間 | 5,145 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 103 |
ソースコード
def solve(N):
v = 10**9 + 1
if N < v:
return 0
a = N //v
return count_palindrome(a)
def count_palindrome(n):
''' 1 以上 n 以下の整数で、回文数となるものの個数を返す。
1..9: 9個
10..99: 9個
100..999: 10 から 99 までの 90個
1000..9999: 10 から 99 までの 90個
n = abc len(a)=len(c)=m, len(b)=1 のとき、
偶数桁分は、10**m 個
奇数桁分は、rev(a) <= c ならば、ab 個
rev(a) > c ならば、ab - 1 個
n = ac len(a) = len(c) = m のとき、
奇数桁分は、10**m 個
偶数桁分は、rev(a) <= c ならば、a 個
rev(a) > c ならば、a - 1 個
'''
if n < 10:
return n
s = str(n)
m, is_odd = divmod(len(s), 2)
a = int(s[:m])
rev_a = int(s[:m][::-1])
c = int(s[-m:])
ans = 10 ** m - 1
if is_odd:
b = int(s[m])
ans += a * 10 + b
else:
ans += a
if c < rev_a:
ans -= 1
return ans
N = int(input())
print(solve(N))