首页 > 试题广场 >

小红的圆构造

[编程题]小红的圆构造
  • 热度指数:71 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
平面直角坐标系内有一点P。小红希望你构造一个圆满足以下两个条件:
1. 圆和两个坐标轴都相切。
2. 圆经过点P

显然,一共有两个合法的解。你需要从小到大输出这两个解的圆的半径。

输入描述:
两个正整数x_P,y_P,代表点P的坐标。
1\leq x_P,y_P \leq 10^5


输出描述:
从小到大输出两个浮点数,分别代表两个解的圆的半径。如果你的答案和标准答案的误差不超过10^{-6},则认为你的答案正确。
示例1

输入

1 2

输出

1.0000 5.0000

说明

如下图,蓝色的为合法的两个圆。

#两次二分查找
import sys
def search(x, y):
    low = 0
    high = max(x, y)
    last = 0
    current = 1
    while high - low > 1e-7:
        mid = (high + low) / 2.0
        if (x - mid) * (x - mid) + (y - mid) * (y - mid) > mid * mid:
            low = mid
        else:
            high = mid 
    ans1 = low
    low = max(x, y) + 1e-8
    high = max(x, y) * 10 #可以取更精确的上界倍数,10可以pass
    last = 0
    current = 1
    while high - low > 1e-7:
        mid = (high + low) / 2.0
        if (x - mid) * (x - mid) + (y - mid) * (y - mid) > mid * mid:
            high = mid
        else:
            low = mid 
    ans2 = low
    print(ans1, ans2)
for line in sys.stdin:
    a = line.split()
    search(int(a[0]),int(a[1]))

发表于 2025-04-25 06:54:30 回复(0)