• 大厂秋招真题【模拟】OPPO20230802秋招提前批T2-小欧的圆覆盖【欧弟算法】全网最全大厂秋招题解


    题目描述与示例

    题目描述

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

    输入描述

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

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

    输出描述

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

    示例

    输入

    0 0 1 1
    0 0
    
    • 1
    • 2

    输出

    6.2831853
    
    • 1

    解题思路

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

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

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

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

    代码

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    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));
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    C++

    #include 
    #include 
    #include 
    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 
        cout << fixed << setprecision(4) << area << endl;
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    时空复杂度

    时间复杂度:O(1)

    空间复杂度:O(1)


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

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

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

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

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

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

    • 可查看链接 大厂真题汇总 & OD真题汇总(持续更新)

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

  • 相关阅读:
    【操作教程】TSINGSEE青犀视频平台如何将旧数据库导入到新数据库?
    mellanox&nvidia 不带管理口IB交换机升级FW及基本管理
    Java常见注解及其使用汇总
    仿钉钉考勤统计页面的日历组件,通过日历展示每日考勤打卡情况,支持在日历上打两种不同类型的点,大致适配各种分辨率效果图
    PS文字创建工作路径矢量化后变细,导出的svg也变细的解决方案
    跨服架构的演进
    C++——namespace &std
    通过RSYNC在linux和windows间同步文件
    CalBioreagents 绵羊抗α-2-HS糖蛋白 亲和纯化说明
    document对象概念介绍、验证用户名是否有效、正则表达式对象、两种常见的验证提示效果
  • 原文地址:https://blog.csdn.net/weixin_48157259/article/details/133813483