版权声明:未经过同意不得转载 https://blog.csdn.net/qq_42500298/article/details/82845131
#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct Object
{
ll u,d,l,r,s;
int p,x;
bool flag;
}a[2005];
int n,ans[2005],top;
bool cmp(Object a,Object b)
{
return a.p>b.p;
}
ll calc(int i,int j)
{
ll up=min(a[i].u,a[j].u);
ll down=max(a[i].d,a[j].d);
ll left=max(a[i].l,a[j].l);
ll right=min(a[i].r,a[j].r);
if(up<=down||left>=right)
return 0;
return (up-down)*(right-left);
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
ll x,y,h,w;
scanf("%d%lld%lld%lld%lld",&a[i].p,&x,&y,&w,&h);
a[i].u=y+h;
a[i].d=y-h;
a[i].l=x-w;
a[i].r=x+w;
a[i].x=i;
a[i].s=4*h*w;
}
sort(a+1,a+n+1,cmp);
while(a[n].p<600000)
n--;
for(int i=1;i<=n;i++)
{
if(a[i].flag)
continue;
ans[++top]=a[i].x;
for(int j=i+1;j<=n;j++)
{
if(a[j].flag)
continue;
ll s=calc(i,j);
if(2*s>a[i].s+a[j].s-s)
a[j].flag=1;
}
}
sort(ans+1,ans+top+1);
for(int i=1;i<=top;i++)
printf("%d ",ans[i]);
printf("\n");
return 0;
}
来源:zr