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