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

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

【AC代码】:

#include <iostream>
#include <algorithm>
#include <iomanip>
#include <cstdio>
#include <cstring>
using namespace std;

double getLen(double x[])
{
	double a = x[0], b = x[1], c = x[2], d = x[3];
	if (b < c)
	{
		return 0.0;
	}
	else if (b >= c && b <= d)
	{
		if (a > c)
			return b-a;
		else
			return b-c;
	}
	else if (b > d)
	{
		if (a <= c)
			return d-c;
		else if (a > c && a < d)
			return d-a;
		else
			return 0.0;
	}
}

int main()
{
	//freopen("in.txt", "r", stdin);
	//freopen("out.txt", "w", stdout);
	double x[4], y[4];
	int  i = 0;

	//input
	for (i = 0; i < 4; i++)
	{
		cin >> x[i] >> y[i];
	}

	//get len
	sort(x, x+2);
	sort(x+2, x+4);
	sort(y, y+2);
	sort(y+2, y+4);
	double len_x = getLen(x);
	double len_y = getLen(y);

	//cout << len_x << " " << len_y << endl;

	cout << fixed << setprecision(2) <<  len_x*len_y;
}

线段相交曾经看过,应该有更好的方法。这个代码写的很烂。

时间: 2024-10-10 09:16:16

蓝桥杯 BASIC-18 矩形面积交(线段重叠)的相关文章

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

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

[BASIC-18] 矩形面积交

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

poj-1151矩形面积并-线段树

title: poj-1151矩形面积并-线段树 date: 2018-10-30 22:35:11 tags: acm 刷题 categoties: ACM-线段树 概述 线段树问题里的另一个问题,,,矩形面积并,,,, 之前看lazy更新时看到下面这个的讲解,,,一大堆文字还有一大堆的图,,,,当时果断跳过,,, 今天花了一下午加一晚上的时间看了看这块知识,,,然后尝试自己写出代码,,,算是简单的了解一下这块,,, 题意 这道矩形面积并问题的大意是给很多个矩形,,矩形之间可能有交集,,,然后

基础训练 矩形面积交

矩形面积交 #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];//整段被

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

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