解题思路:
* 思路算法
* 使用一个八个位置的数组来容纳坐标点
* (x1,y1)(x2,y2)(x3,y3)(x4,y4)
* 对于不相交的矩形,其面积为
* (x2-x1)*(y2-y1)+(x4-x3)*(y4-y3)
*
* 对于相交的矩形
* 其左下角和右上角的坐标点确定方法
* 假设其点[左下角(m1,n1)和右上角(m2,n2)]
* m1=max(min(x1,x2),min(x3,x4))
* n1=max(min(y1,y2),min(y3,y4))
* m2=min(max(x1,x2),max(x3,x4))
* n2=min(max(y1,y2),max(y3,y4))
*
* 对于相交的矩形
* 必有m1<m2   n1<n2
* 对于其面积
* (x2-x1)*(y2-y1)+(x4-x3)*(y4-y3)-(m2-m1)*(n2-n1)

注意事项:
因为坐标会涉及到10^5,10^5*10^5会爆掉int所以需要用long
参考代码:

import java.util.*;

public class Main {
    public static void main(String[] args){
        //首先建立一个数组存放坐标点信息
        Scanner sc=new Scanner(System.in);
        long[] a=new long[8];
        for(int i=0;i<8;i++){
            a[i]=sc.nextInt();
        }
        //计算(m1,n1),(m2,n2)的坐标点位置
        //[x1,y1,x2,y2,x3,y3,x4,y4]
        //[0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 ]
        //m1=max(min(x1,x2),min(x3,x4))
        //n1=max(min(y1,y2),min(y3,y4))
        //m2=min(max(x1,x2),max(x3,x4))
        //n2=min(max(y1,y2),max(y3,y4))
        long m1=Math.max(Math.min(a[0],a[2]),Math.min(a[4],a[6]));
        long n1=Math.max(Math.min(a[1],a[3]),Math.min(a[5],a[7]));
        long m2=Math.min(Math.max(a[0],a[2]),Math.max(a[4],a[6]));
        long n2=Math.min(Math.max(a[1],a[3]),Math.max(a[5],a[7]));

        //计算结果

        if(m1<m2&&n1<n2){
            //(x2-x1)*(y2-y1)+(x4-x3)*(y4-y3)-(m2-m1)*(n2-n1)
            long s1=(a[2]-a[0])*(a[3]-a[1])+(a[6]-a[4])*(a[7]-a[5])-(m2-m1)*(n2-n1);
            System.out.println(s1);
        }else{
            long s2=(a[2]-a[0])*(a[3]-a[1])+(a[6]-a[4])*(a[7]-a[5]);
            System.out.println(s2);
        }

    }
}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论