题解 UVA10023【Square root】

$\text{Link}$

题意

给 $Y$,求 $\sqrt{Y}$,保证 $\sqrt T\in \Bbb{N}$。多组数据。

$Y\le 10^{10^3}$。

思路

这是一篇 Python 题解,如果您想看 C++ 请移步其他题解,此题解仅用于告诫后人。

这道题很显然的高精度,我们可以想到使用 Python

Python 自带了 math.sqrt 函数,但是它可能处理不了这么大的数据范围,于是我们可以二分。

二分边界可以设为 $[2^{\left\lfloor\log Y\right\rfloor},2^{\left\lceil\log Y\right\rceil}]$,时间复杂度 $O(\log Y)$。

然后你写好了,一交,RE?

你又看了看题面,发现了这样一句话:

输入

每组数据由空行隔开。

于是你读完空行再交,WA?

我们还可以发现题面要求每组输出间用空行隔开,而且最后不需要使用空行。

于是你终于过了。

代码:

t=int(input())
for q in range(t):
    n=input()
    m=int(input())
    l=0
    r=1
    while(r*r<=m):
        l=r
        r=r*2
    while(l+1<r):
        mid=(l+r)//2
        if(mid*mid<=m):
            l=mid
        else:
          r=mid
    print(l)
    if q<t-1:
        print()

再见 qwq~

posted @ 2021-05-06 12:50  ffffyc  阅读(12)  评论(0)    收藏  举报  来源