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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值