题目描述
网易
平面内有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。
我的思路
感觉贼笨蛋,将每个矩形所有面积内覆盖,读出矩阵最大数
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n;
cout<<"enter n: ";
cin>>n;
vector<int>x1(n, 0);
vector<int>y1(n, 0);
vector<int>x2(n, 0);
vector<int>y2(n, 0);
int maxValue = 0;
int maxx=0, maxy=0;
cout<<"enter each index:"<<endl;
for(int i=0; i<n; i++)
{
cin>>x1[i];
maxx = maxx>x1[i]?maxx:x1[i];
}
for(int i=0; i<n; i++)
{
cin>>y1[i];
maxy = maxy>y1[i]?maxy:y1[i];
}
for(int i=0; i<n; i++)
{
cin>>x2[i];
maxx = maxx>x2[i]?maxx:x2[i];
}
for(int i=0; i<n; i++)
{
cin>>y2[i];
maxy = maxy>y2[i]?maxy:y2[i];
}
vector<vector<int>> record(maxx+1, vector<int>(maxy+1, 0));
for(int i=0; i<n; i++)
{
for(int x=x1[i]; x<=x2[i]; x++)
{
for(int y=y1[i]; y<=y2[i]; y++)
{
record[x][y] +=1;
maxValue = maxValue>record[x][y]?maxValue:record[x][y];
}
}
}
cout<<maxValue<<endl;
}
咩有通过
答案错误:您提交的程序没有通过所有的测试用例
case通过率为40.00%
解题思路
链接:https://www.nowcoder.com/questionTerminal/a22dd98b3d224f2bb89142f8acc2fe57
来源:牛客网
参考:无论何种情况,重叠区域也是四条边组成。而且是取自与n的矩形中的四条。所以遍历边的交点即可。
想要知道某个重合区域在多少个矩形内,可以转化为计算这个重合区域的左下角在多少个矩形内。外面两层循环遍历了所有重合区域可能的左下角,最里层循环计算这个左下角在多少个矩形内。
核心代码
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n;
cin>>n;
vector<int>x1(n, 0);
vector<int>y1(n, 0);
vector<int>x2(n, 0);
vector<int>y2(n, 0);
int maxValue = 0, res=0;
int maxx=0, maxy=0;
for(int i=0; i<n; i++)
{
cin>>x1[i];
}
for(int i=0; i<n; i++)
{
cin>>y1[i];
}
for(int i=0; i<n; i++)
{
cin>>x2[i];
}
for(int i=0; i<n; i++)
{
cin>>y2[i];
}
for(int x: x1)
{
for(int y: y1)
{
for(int i=0; i<n; i++)
if(x>=x1[i] && x<x2[i] && y>=y1[i] && y<y2[i])
{
maxValue++;
}
res = res>maxValue?res:maxValue;
maxValue=0;
}
}
cout<<res<<endl;
return 0;
}
运行时间:5ms
占用内存:408k