sgu 177 Square 矩形切割

    n*n的矩形,由1*1的单位方格构成,先可以对其中的子矩形染色(黑或白),染色完成后,有多少个白色单位方格?第一次做这种题,第一眼看上去感觉应该是二维线段树....后来在网上查了查这类覆盖,统计的问题可以用矩形切割来写,果断学习到了新的姿势...大致思路就是倒着扫描每个矩形,处理每个矩形时,向后遍历判断后面的矩形是否与其重叠,重叠的话就分割冲若干种小的矩形继续处理,直到最后统计没有被覆盖的面积..实现直接看代码吧..

#include <iostream>
#include <cstdio>
#include <memory.h>
using namespace std;
typedef long long ll;
int n,m;
int x1[10020],x2[10020],y1[10020],y2[10020];
int col[10020];
char c[3];
int cnt;
void slove(int xs,int ys,int xt,int yt,int d,int c)
{

    while (((xs>=x2[d])||(xt<=x1[d])||(ys>=y2[d])||(yt<=y1[d]))&& d<=m) d++;
    if (d==m+1)
    {
        if (c) cnt+=(yt-ys)*(xt-xs);
        return;
    }
    if (xs<x1[d])
    {
        slove(xs,ys,x1[d],yt,d+1,c);
        xs=x1[d];
    }
    if (xt>x2[d])
    {
        slove(x2[d],ys,xt,yt,d+1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值