首页 > 试题广场 >

矩形重叠

[编程题]矩形重叠
  • 热度指数:22711 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

平面内有n个矩形, 第i个矩形的左下角坐标为(x1[i], y1[i]), 右上角坐标为(x2[i], y2[i])。

如果两个或者多个矩形有公共区域则认为它们是相互重叠的(不考虑边界和角落)。

请你计算出平面内重叠矩形数量最多的地方,有多少个矩形相互重叠。


输入描述:
输入包括五行。
第一行包括一个整数n(2 <= n <= 50), 表示矩形的个数。
第二行包括n个整数x1[i](-10^9 <= x1[i] <= 10^9),表示左下角的横坐标。
第三行包括n个整数y1[i](-10^9 <= y1[i] <= 10^9),表示左下角的纵坐标。
第四行包括n个整数x2[i](-10^9 <= x2[i] <= 10^9),表示右上角的横坐标。
第五行包括n个整数y2[i](-10^9 <= y2[i] <= 10^9),表示右上角的纵坐标。


输出描述:
输出一个正整数, 表示最多的地方有多少个矩形相互重叠,如果矩形都不互相重叠,输出1。
示例1

输入

2
0 90
0 90
100 200
100 200

输出

2
头像 白色高跟鞋
发表于 2020-04-28 20:02:24
目前想到两种解法,分别为O(n^3)和O(n^2~n^2*ln),python 7/20行以内搞定。 先说简单易理解的方法(7行)0: 取所有的矩形角点,对每个角点取所有矩形; 判断角点是否在矩形内,特别的,角点在边界上时只应当判断左半边。 n = int(input()) x1s, y1s = 展开全文
头像 牛客题解官
发表于 2020-06-04 11:16:13
题目难度:三星考察点:枚举、几何 方法:枚举 分析:注意一点题目要求的是平面内重叠矩形数量最多的地方,有多少个矩形相互重叠?那么对于这个题目来说,正常的循环遍历方法是无法轻易解决的,那么我们换种方法,我们想办法将这n个矩形所包含的点全部枚举出来,然后在检查看有多少个矩形包含这个点,输出包含点最多的 展开全文
头像 c小白进击之路
发表于 2021-04-09 09:40:01
我看了前人的题解和讨论,一直没有理解离散的概念。 在昨晚洗澡的时候,突然醒悟,然后拿两个矩形模拟重叠的各个状态,验证猜想。 废话不多说,以下为逻辑解析(热水能促进思维,哈哈) ------------------------------------------------------- 展开全文
头像 中科院在逃院士
发表于 2021-07-14 17:35:28
这题思路好理解,就是写起来好他妈绕,我记录一下 import java.util.*; public class Main { public static void main(String[] args){ Scanner sc=new Scanner(Sys 展开全文
头像 刷代码的长颈鹿
发表于 2025-02-16 11:38:05
#include<iostream> #include<algorithm> #include<vector> typedef long long ll; using namespace std; int main() { int n, count = 展开全文
头像 laglangyue
发表于 2020-05-15 21:52:46
多个对象求相交问题,多对多难解决,分解为1对多问题,相交矩形内部必然存在一点是所有矩形的内部,一开始就想着一个点遍历所有坐标点事实上,把内部扩展位边上也算内部,这就要考虑两个矩形只有边相交问题了。只从左下角点取点,通过小于而不等于右上角点就能解决x1[i] <= x && x 展开全文

热门推荐

通过挑战的用户

查看代码
矩形重叠