[BASIC-18] 矩形面积交

基础练习 矩形面积交

时间限制:1.0s   内存限制:512.0MB

问题描述

  平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。

输入格式

  输入仅包含两行,每行描述一个矩形。

  在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。

输出格式

  输出仅包含一个实数,为交的面积,保留到小数后两位。

样例输入

1 1 3 3

2 2 4 4

样例输出

1.00

分析:

1、需要注意的有:一个矩形有两对相对顶点,题目中没有具体说明给的是哪一对,所以都要考虑;输入数据中也没有说明相对顶点的输入顺序,这点也要注意到

2、针对 1 中注意事项,我们可以分情况讨论,也可以采取一种策略综合处理:比如说给出的一组坐标是 ( x1 ,y1 ) ( x2 ,y2 ) ,不管这组坐标的相对位置如何,我们都可以得到

主对角线上的相对顶点坐标 ( min ( x1 ,x2 ) ,max ( y1 ,y2 ) ) ( max ( x1 ,x2 ) ,min ( y1 ,y2 ) ) 或者是副对角线上的相对顶点坐标 ( min ( x1 ,x2 ) ,min ( y1 ,y2 ) ) ( max ( x1 ,x2 ) ,max ( y1 ,y2 ) ) ,这里我得到的是副对角线上的相对顶点坐标

3、假设我们通过 2 中综合处理的思想,已经得到副对角线上的相对顶点坐标 ( x1 ,y1 ) ( x2 ,y2 ) 和 ( a1 ,b1 ) ( a2 ,b2 ) 。注意!得到的坐标是有顺序的,( x1 ,y1 ) ( a1 ,b1 ) 始终是左下角,( x2 ,y2 ) ( a2 ,b2 ) 始终是右上角

4、通过 3 中得到的坐标,我们又可以得到矩形相交部分的坐标(暂时假设有相交的部分):( max ( x1 ,a1 ) ,max ( y1 ,b1 ) ) ( min ( x2 ,a2 ) ,min ( y2 ,b2 ) )。注意,这样得到的坐标也是有顺序的,( max ( x1 ,a1 ),max ( y1 ,b1 ) ) 是左下角,( min ( x2 ,a2 ),min ( y2 ,b2 ) ) 是右上角

5、判断矩形是否有相交的部分:利用 4 中得到的坐标数据,如果 max ( x1 ,a1 ) > min ( x2 ,a2 ) 或者 max ( y1 ,b1 ) > min ( y2 ,b2 ) ,就说明矩形之间没有相交的部分,反之则有

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);

		while (scanner.hasNext()) {
			double[] temp1 = new double[4];
			double[] temp2 = new double[4];
			double[] rect1 = new double[4];
			double[] rect2 = new double[4];

			for (int i = 0; i < 4; i++) {
				temp1[i] = scanner.nextDouble();
			}

			for (int i = 0; i < 4; i++) {
				temp2[i] = scanner.nextDouble();
			}

			// 得到第一个矩形的副对角线坐标
			rect1[0] = Math.min(temp1[0], temp1[2]);
			rect1[1] = Math.min(temp1[1], temp1[3]);
			rect1[2] = Math.max(temp1[0], temp1[2]);
			rect1[3] = Math.max(temp1[1], temp1[3]);

			// 得到第二个矩形的副对角线坐标
			rect2[0] = Math.min(temp2[0], temp2[2]);
			rect2[1] = Math.min(temp2[1], temp2[3]);
			rect2[2] = Math.max(temp2[0], temp2[2]);
			rect2[3] = Math.max(temp2[1], temp2[3]);

			// 得到矩形相交部分的坐标(副对角线)
			double[] rect = new double[4];
			rect[0] = Math.max(rect1[0], rect2[0]);
			rect[1] = Math.max(rect1[1], rect2[1]);
			rect[2] = Math.min(rect1[2], rect2[2]);
			rect[3] = Math.min(rect1[3], rect2[3]);

			double area = 0;
			if (rect[0] >= rect[2]) {
				System.out.printf("%.2f\r\n", area);
			} else {
				area = (rect[2] - rect[0]) * (rect[3] - rect[1]);
				System.out.printf("%.2f\r\n", area);
			}
		}
	}
}

[BASIC-18] 矩形面积交,布布扣,bubuko.com

时间: 2024-08-04 03:45:53

[BASIC-18] 矩形面积交的相关文章

蓝桥杯_基础练习《矩形面积交---26》

/* 基础练习 矩形面积交 问题描述 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴.对于每个矩形,我们 给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积. 输入格式 输入仅包含两行,每行描述一个矩形. 在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过 10^7的实数表示. 输出格式 输出仅包含一个实数,为交的面积,保留到小数后两位. 样例输入 1 1 3 3 2 2 4 4 样例输出 1.00 */ //矩形的相交面积. #include<stdio.

基础训练 矩形面积交

矩形面积交 #include<iostream> #include<iomanip> using namespace std; int main(){ double m1, n1, m2, n2, a1, b1, a2, b2, d1=0, d2=0; cin>>m1>>n1>>m2>>n2>>a1>>b1>>a2>>b2; if(m1>m2) swap(m1, m2); if(n

基础练习 矩形面积交

时间限制:1.0s   内存限制:512.0MB 问题描述 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴.对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积. 输入格式 输入仅包含两行,每行描述一个矩形. 在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示. 输出格式 输出仅包含一个实数,为交的面积,保留到小数后两位. 样例输入 1 1 3 3 2 2 4 4 样例输出 1.00 hint:给你两个矩形的两个对角坐标,让

[CSP校内集训]矩形面积交(树状数组)

题意 给\(n\)个互不相交的矩形,再给\(m\)个询问,每次给一个矩形求它与这\(n\)个矩形的面积交 思路 自己写的太丑了导致DEBUG了一个半小时qwq 一对矩形的交可以拆分成二维前缀和形式下的矩形的交,于是变成判断16次矩形的交(不想画图...只想口胡) 这些矩形都有\(x_0=0,y_0=0\),即左下角为坐标原点,于是一个矩形可以只用右上角的坐标表示: 对于一个询问的矩形\((x,y)\)和另一个矩形\((x_i,y_i)\),它们的交为\(min(x,x_i)\times min(

【试题 基础练习 矩形面积交】最废的矩形相交面积解

问题描述 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴.对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积. 输入格式 输入仅包含两行,每行描述一个矩形. 在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示. 输出格式 输出仅包含一个实数,为交的面积,保留到小数后两位. 样例输入 1 1 3 32 2 4 4 样例输出 1.00 import java.io.BufferedWriter; import java.io.

hdu1255(线段树——矩形面积交)

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1255 题意:求N个矩形中,求被覆盖至少俩次的面积和 分析:覆盖两次即col[rt]>=2就好.一开始将线段pushdown到叶子节点,根据col[rt]>=2才pushup上来,差点超时了,其实可以lazy标志,整段更新的,只是没想到而已. 用sum[rt][0]表示该节点rt代表的线段被覆盖一次的长度之和,则 if(col[rt])sum[rt][0]=pos[r+1]-pos[l];//整段被

蓝桥杯 BASIC-18 矩形面积交(线段重叠)

[思路]:将各个边平行到x.y轴上,重叠部分相乘得面积.getLen中是两条线相交的各种判断.注意:因为输入一个矩形的两个点并没有说先输入左下再输入右上(测试数据也确实有先输入了右上),所以一定要两两排序.否则会出现a大于b的情况. [AC代码]: #include <iostream> #include <algorithm> #include <iomanip> #include <cstdio> #include <cstring> usi

蓝桥网试题 java 基础练习 矩形面积交

------------------------------------------------------------------------------------------- 思路见锦囊2 ------------------------------------------------------------------------------------------- 算法 1 import java.util.Scanner; 2 public class Main { 3 publ

HDU2056 Rectangles 【矩形面积交】

Rectangles Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 15950    Accepted Submission(s): 5104 Problem Description Given two rectangles and the coordinates of two points on the diagonals of e