题目来源:https://www.nowcoder.com/question/next?
题意
求最多重叠矩形个数(不考虑边界和角落)
思路
暴力n的矩形的各自的四个点,计算出其中的点最多被多少个矩形包围。
反思
栽在了思维惯性,之前做过扫描线的专题,就自然而然的往那方面想了。。
求矩形重叠,可以看成点最多被多少矩形包围,,,
代码
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
const int maxn=100+10;
struct pp
{
int x1,x2;
int y1,y2;
}mat[maxn];
int X[maxn],Y[maxn];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&X[i]);
mat[i].x1=X[i];
}
for(int i=0;i<n;i++)
{
scanf("%d",&Y[i]);
mat[i].y1=Y[i];
}
for(int i=n;i<2*n;i++)
{
scanf("%d",&X[i]);
mat[i-n].x2=X[i];
}
for(int i=n;i<2*n;i++)
{
scanf("%d",&Y[i]);
mat[i-n].y2=Y[i];
}
int resMax=0;
for(int i=0;i<2*n;i++)
{
for(int j=0;j<2*n;j++)
{
int temp=0;
for(int k=0;k<n;k++)
{
if(mat[k].x1<=X[i]&&mat[k].y1<=Y[j]&&mat[k].x2>X[i]&&mat[k].y2>Y[j])
//边界处理
temp++;
}
resMax=max(temp,resMax);
}
}
printf("%d\n",resMax);
return 0;
}