大厂真题:【模拟】OPPO2023秋招提前批-小欧的圆覆盖

题目描述与示例

题目描述

在平面直角坐标系上有一个矩形,和一个定点P。小欧希望以点P为圆心画一个圆覆盖这个矩形,请你求出圆面积的最小值。注:π3.1415926536

输入描述

第一行输入四个整数x1,y1,x2,y2,代表矩形左下角坐标为(x1,y1),右上角坐标为(x2,y2)

第二行输入两个整数xp,yp,代表点P的坐标为(xp,yp)

输出描述

一个浮点数,代表圆的最小面积。如果你的答案和标准答案的相对误差不超过10^-4,则认为你的答案正确。

示例

输入

Plain 复制代码
0 0 1 1
0 0

输出

Plain 复制代码
6.2831853

解题思路

本题是非常简单的数学模拟题。

为了使得以P为圆心的圆可以覆盖到整个矩形,仅需要枚举圆心P到矩形四个顶点的距离,对四个距离取最大值即可。

暂时无法在飞书文档外展示此内容

关于两点之间欧式距离的计算可以详见文档常用数学概念、公式汇总

代码

Python

Python 复制代码
# 题目:【模拟】OPPO2023秋招提前批-小欧的圆覆盖
# 作者:闭着眼睛学数理化
# 算法:模拟/数学
# 代码有看不懂的地方请直接在群上提问


from math import sqrt

# 计算两个点(x1, y1)和(x2, y2)的函数
def cal_dis(x1, y1, x2, y2):
    return sqrt((x1-x2)**2 + (y1-y2)**2)


# 表示矩形的两个坐标
x1, y1, x2, y2 = map(int, input().split())
# 点p的坐标
x0, y0 = map(int, input().split())

# 计算圆心p到矩形四个顶点的距离
r1 = cal_dis(x0, y0, x1, y1)
r2 = cal_dis(x0, y0, x1, y2)
r3 = cal_dis(x0, y0, x2, y1)
r4 = cal_dis(x0, y0, x2, y2)

# 四个距离中的最大值,为圆半径的最小值
r = max([r1, r2, r3, r4])

pi = 3.1415926536
# 计算圆面积
print(r*r*pi)

Java

Java 复制代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int x1 = scanner.nextInt();
        int y1 = scanner.nextInt();
        int x2 = scanner.nextInt();
        int y2 = scanner.nextInt();
        int x0 = scanner.nextInt();
        int y0 = scanner.nextInt();

        double r1 = calDis(x0, y0, x1, y1);
        double r2 = calDis(x0, y0, x1, y2);
        double r3 = calDis(x0, y0, x2, y1);
        double r4 = calDis(x0, y0, x2, y2);

        double r = Math.max(Math.max(r1, r2), Math.max(r3, r4));

        double pi = 3.1415926536;
        double area = r * r * pi;
        System.out.println(area);
    }

    public static double calDis(int x1, int y1, int x2, int y2) {
        return Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));
    }
}

C++

C++ 复制代码
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

double calDis(int x1, int y1, int x2, int y2) {
    return sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2));
}

int main() {
    int x1, y1, x2, y2, x0, y0;
    cin >> x1 >> y1 >> x2 >> y2 >> x0 >> y0;

    double r1 = calDis(x0, y0, x1, y1);
    double r2 = calDis(x0, y0, x1, y2);
    double r3 = calDis(x0, y0, x2, y1);
    double r4 = calDis(x0, y0, x2, y2);

    double r = max(max(r1, r2), max(r3, r4));

    double pi = 3.1415926536;
    double area = r * r * pi;
    // fixed << setprecision(4)用于调整精度
    // 需要 #include <iomanip>
    cout << fixed << setprecision(4) << area << endl;

    return 0;
}

时空复杂度

时间复杂度:O(1)

空间复杂度:O(1)

华为OD算法/大厂面试高频题算法练习冲刺训练

  • 华为OD算法/大厂面试高频题算法冲刺训练目前开始常态化报名!目前已服务100+同学成功上岸!

  • 课程讲师为全网50w+粉丝编程博主@吴师兄学算法 以及小红书头部编程博主@闭着眼睛学数理化

  • 每期人数维持在20人内,保证能够最大限度地满足到每一个同学的需求,达到和1v1同样的学习效果!

  • 60+天陪伴式学习,40+直播课时,300+动画图解视频,300+LeetCode经典题,200+华为OD真题/大厂真题,还有简历修改、模拟面试、专属HR对接将为你解锁

  • 可上全网独家的欧弟OJ系统练习华子OD、大厂真题

  • 可查看链接 OD算法冲刺训练课程表 & OD真题汇总(持续更新)

  • 绿色聊天软件戳 od1336了解更多

相关推荐
微露清风7 分钟前
模拟算法学习记录
学习·算法
问商十三载42 分钟前
2026法律行业AI引擎生成式优化怎么优化?三层专业加固提排名,零成本提33%引用率附适配表
java·前端·人工智能·算法
zander2581 小时前
138. 随机链表的复制
数据结构·算法·链表
过期动态1 小时前
【LeetCode 热题 100】找到字符串中所有字母异位词
java·数据结构·算法·leetcode·职场和发展·rabbitmq
来一碗刘肉面1 小时前
栈在递归中的应用
数据结构·算法
8K超高清1 小时前
博冠获中国电影电视技术学会科技进步奖
人工智能·科技·算法·安全·接口隔离原则·智能硬件
微石科技2 小时前
长期慢病如何做好居家管理?宁波微石科技星梦云康改善周期数据零散短板
大数据·科技·物联网·算法
微露清风2 小时前
快速排序算法学习记录
学习·算法·排序算法
梓䈑7 小时前
【算法题攻略】BFS 解决FloodFill 算法、最短路问题、多源BFS 和 拓扑排序
c++·算法·宽度优先