提出 #70269059
ソースコード 拡げる
import sys
import math
input = sys.stdin.readline
MAX_K = 10
P = [1] * (MAX_K + 1)
for k in range(1, MAX_K + 1):
P[k] = P[k-1] * 10
def floor_sqrt(n):
if n < 0: return 0
return math.isqrt(n)
def ceil_sqrt(n):
if n < 0: return 0
if n == 0: return 0
m = math.isqrt(n)
if m * m < n:
return m + 1
return m
def solve():
C, D = map(int, input().split())
# C+1 と C+D の桁数を求める
k_min = len(str(C + 1))
k_max = len(str(C + D))
total_count = 0
# k = k_min から k_max までループ
for k in range(k_min, k_max+1):
p_k_hiku_1 = P[k-1]
p_k = P[k]
x_start = max(1, p_k_hiku_1-C)
x_end = min(D, p_k-1-C)
# 該当する x が存在しない場合はスキップ
if x_start > x_end:
continue
# m^2 が取りうる範囲 [L,R]を計算
base = C * p_k + C
L = base + x_start
R = base + x_end
# [L, R] の範囲にある平方数の個数を数える
m_min = ceil_sqrt(L)
m_max = floor_sqrt(R)
if m_min <= m_max:
total_count += (m_max - m_min + 1)
print(total_count)
T = int(input())
for _ in range(T):
solve()
提出情報
| 提出日時 | |
|---|---|
| 問題 | D - 183184 |
| ユーザ | exophia |
| 言語 | Python (PyPy 3.10-v7.3.12) |
| 得点 | 400 |
| コード長 | 1350 Byte |
| 結果 | AC |
| 実行時間 | 686 ms |
| メモリ | 103324 KiB |
ジャッジ結果
| セット名 | Sample | All | ||||
|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 400 / 400 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | 00-sample-01.txt |
| All | 00-sample-01.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| 00-sample-01.txt | AC | 55 ms | 76340 KiB |
| 01-01.txt | AC | 660 ms | 102868 KiB |
| 01-02.txt | AC | 686 ms | 103152 KiB |
| 01-03.txt | AC | 315 ms | 99144 KiB |
| 01-04.txt | AC | 373 ms | 101416 KiB |
| 01-05.txt | AC | 665 ms | 103324 KiB |
| 01-06.txt | AC | 414 ms | 100600 KiB |
| 01-07.txt | AC | 334 ms | 98488 KiB |
| 01-08.txt | AC | 460 ms | 101896 KiB |
| 01-09.txt | AC | 542 ms | 102048 KiB |