Submission #70271762


Source Code Expand

import math
def gutyoku(C, D):
    cnt = 0
    for i in range(1, D + 1):
        S = int(str(C) + str(C + i))
        x = math.isqrt(S)
        if(x * x == S):
            # print(x, S, C, i, C + i)
            cnt += 1
    return cnt
def solve(C, D):
    cnt = 0
    y = math.isqrt(int(str(C) + str(C)))
    MAX_V = int(str(C) + str(C + D))
    # print(y)
    SC = str(C)
    while y * y <= MAX_V:
        y += 1
        S = str(y * y)
        is_ok = True
        print(y * y)
        print(MAX_V)
        for j in range(len(SC)):
            if(SC[j] != S[j]):
                is_ok = False
                break
        if(is_ok):
            print(S)
            Rest = S[len(SC):]
            if(Rest[0] == "0"):
                continue
            if(int(Rest) - C > D):
                return cnt
            if(int(Rest) - C >= 1):
                cnt += 1


def solve2(C, D):
    cnt = 0
    # SC = str(C)
    MIN_LEN = len(str(C + 1))
    MAX_LEN = len(str(C + D))
    for i in range(MIN_LEN, MAX_LEN + 1):
        if(i == MIN_LEN):
            y = math.isqrt(int(str(C) + str(C).zfill(i))) + 1
            # print(str(C) + str(C).zfill(i))
        else:
            y = math.isqrt(int(str(C) + "0" + "9" * (i - 1))) + 1
            # print(str(C) + "1" + "0" * (i - 1))
        # print(int(str(C) + str(C).zfill(i)))
        if(i == MAX_LEN):
            y2 = math.isqrt(int(str(C) + str(C + D))) + 1
            # print
            # print(int(str(C) + str(C + D)))
        else:
            y2 = math.isqrt(int(str(C) + "9" * i)) + 1
            # print(int(str(C) + "9" * i))

        # print(1353**2)
        # print(y, y2)
        # print(429 ** 2)
        cnt += (y2 - y)
        # while True:
        #     y += 1
            
        #     S = str(y * y)
        #     # print(S)
        #     is_ok = True
        #     for j in range(len(SC)):
        #         if(SC[j] != S[j]):
        #             # print(S)
        #             is_ok = False
        #             break
        #     if(is_ok):
        #         # print(S)
        #         Rest = S[len(SC):]
        #         if(Rest[0] == "0"):
        #             continue
        #         # print(Rest, D)
        #         if(int(Rest) - C > D):
        #             return cnt
        #         if(int(Rest) - C >= 1):
        #             cnt += 1
        #     else:
        #         break
        # break
    return cnt

# import random
# random.seed(154)
# while True:
#     C = random.randint(1, 100)
#     D = random.randint(1, 10)
#     print()
#     ans1 = gutyoku(C, D)
#     ans2 = solve2(C, D)
#     if(ans1 != ans2):
#         print(C, D)
#         print(ans1, ans2)
#         break

T = int(input())
for _ in range(T):
    C, D = map(int, input().split())
    print(solve2(C, D))

Submission Info

Submission Time
Task D - 183184
User Koi51
Language Python (PyPy 3.10-v7.3.12)
Score 400
Code Size 2891 Byte
Status AC
Exec Time 1270 ms
Memory 87108 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 400 / 400
Status
AC × 1
AC × 10
Set Name Test Cases
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
Case Name Status Exec Time Memory
00-sample-01.txt AC 57 ms 76444 KiB
01-01.txt AC 1216 ms 86760 KiB
01-02.txt AC 1270 ms 87108 KiB
01-03.txt AC 815 ms 84092 KiB
01-04.txt AC 863 ms 84448 KiB
01-05.txt AC 1244 ms 86164 KiB
01-06.txt AC 903 ms 85048 KiB
01-07.txt AC 782 ms 84216 KiB
01-08.txt AC 961 ms 85576 KiB
01-09.txt AC 1048 ms 84768 KiB