提出 #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
結果
AC × 1
AC × 10
セット名 テストケース
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