以下の内容はhttps://inamori.hateblo.jp/entry/2025/10/19/204146より取得しました。


AtCoder Beginner Contest 428 D

https://atcoder.jp/contests/abc428/tasks/abc428_d

yの桁数を決めれば整数の範囲が決まるので、平方根のfloorを求められればその範囲の平方数の個数が求められます。

// 183184
#![allow(non_snake_case)]

use std::cmp::{min, max};


//////////////////// library ////////////////////

fn read<T: std::str::FromStr>() -> T {
    let mut line = String::new();
    std::io::stdin().read_line(&mut line).ok();
    line.trim().parse().ok().unwrap()
}

fn read_vec<T: std::str::FromStr>() -> Vec<T> {
    read::<String>().split_whitespace()
            .map(|e| e.parse().ok().unwrap()).collect()
}

fn int_sqrt(n: i64) -> i64 {
    let mut x = (n + 1) / 2;
    loop {
        let x1 = (x + n / x) / 2;
        if x1 >= x {
            return x
        }
        x = x1
    }
}


//////////////////// process ////////////////////

fn read_test() -> (i64, i64) {
    let v: Vec<i64> = read_vec();
    let (C, D) = (v[0], v[1]);
    (C, D)
}

fn F_each(C: i64, D: i64) -> i64 {
    let mut counter: i64 = 0;
    let mut p: i64 = 1;
    loop {
        p *= 10;
        if C+D < p/10 {
            break
        }
        if C+1 > p {
            continue
        }
        let first = C*p + max(C+1, p/10);
        let last = C*p + min(C+D+1, p);
        counter += int_sqrt(last - 1) - int_sqrt(first - 1)
    }
    counter
}

fn F(T: usize) {
    for _ in 0..T {
        let (C, D) = read_test();
        println!("{}", F_each(C, D))
    }
}

fn main() {
    let T: usize = read();
    F(T)
}



以上の内容はhttps://inamori.hateblo.jp/entry/2025/10/19/204146より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14