牛客暑期多校第九场补题
Note 这是一条需要注意的普通信息。 I题 题解 把 $L$ 和 $R$ 的高 $\dfrac{n}{2}$ 位计作 $L_{1}$ 和 $R_{1}$,把低 $\dfrac{n}{2}$ 位计作 $L_{2}$ 和 $R_{2}$。大概的思路即为统计 $[L_{1}, R_{1}]$ 和 $[L_{2}, R_{2}]$ 分别有多少个平方数,处理一些细节并组合起来即可。这道题数字还蛮大,用python来实现更简单一点。 代码 from math import sqrt, isqrt def count_square(l, r): if (l > r): return 0 l = int(l) r = int(r) ans = isqrt(r) - isqrt(l) if (isqrt(l) * isqrt(l) == l): ans = ans + 1 return ans # 读取 n n = int(input("")) # 读取两个字符串 str1, str2 = input().split() mid_index = n // 2 # 取出字符串的高 n/2 位和第 n/2 位 high_str1 = str1[:mid_index] low_str1 = str1[mid_index:] high_str2 = str2[:mid_index] low_str2 = str2[mid_index:] # 转化为整数 l1 = int(high_str1) r1 = int(low_str1) l2 = int(high_str2) r2 = int(low_str2) cnt1 = count_square(l1 + 1, l2 - 1) cnt2 = count_square(0, 10 ** (n//2) - 1) ans = cnt1 * cnt2 if (isqrt(l1) * isqrt(l1) == l1): ans += count_square(r1, 10 ** (n//2) - 1) if (l1 != l2): if (isqrt(l2) * isqrt(l2) == l2): ans += count_square(0, r2) print("%d" % ans) K题 题目描述 ...