NOI online judge 矩形分割(二分)

数组记得开够;
最好用函数代替while里面的循环,这样方便不易错

struct rect
{
long long xl,yl,xr,w,h;
}a[10001];
long long R,n;
long long check(long long mid)
{
long long suml=0,sumr=0;
for(int i=1;i<=n;i++)
{
if(a[i].xr<=mid) suml+=a[i].w*a[i].h;
else if(a[i].xl>=mid) sumr+=a[i].w*a[i].h;
else if(mid>=a[i].xl&&mid<=a[i].xr) {suml+=(mid-a[i].xl)*a[i].h; sumr+=(a[i].xr-mid)*a[i].h; }
}
return suml-sumr;
}
int main()
{
scanf(“%lld%lld”,&R,&n);
for(int i=1;i<=n;++i)
{
scanf(“%lld%lld%lld%lld”,&a[i].xl,&a[i].yl,&a[i].w,&a[i].h);
a[i].xr=a[i].xl+a[i].w;
}
long long l=1,r=R;
while(l<=r)
{
long long mid=(l+r)/2;
if(check(mid)>=0) r=mid-1;
else l=mid+1;
}
long long temp=check(l);
while(l

猜你喜欢

转载自blog.csdn.net/L_NOVICE/article/details/82221487