【题解】矩形相交面积

题目描述

  ​有N个矩形,每个矩形给出左上角的坐标和右下角的坐标。
  这些矩形有可能有重叠的部分。求这N个矩形的覆盖的面积总和,重叠部分只算一次面积。

 

输入输出格式

输入格式

  第1行:  一个整数 N, 1 <= N <= 10。
  接下来有N行,每行4个整数:   x1  y1 x2 y2, 其中(x1,y1)是左上角, (x2,y2)是右下角.  坐标范围是【 -10000 ,10000】

 

输出格式

  N个矩形总共覆盖的面积总和。

 

 

输入输出样例

输入样例

2
0 5 4 1
2 4 6 2

 

输出样例

20

 

题解

  容斥原理裸题,具体如下。

#include <iostream>

#define MAX_N (10 + 5)

using namespace std;

int n;
long long x1[MAX_N], y1[MAX_N], x2[MAX_N], y2[MAX_N];
long long ans;

void DFS(long long lx, long long rx, long long ly, long long ry, int dep, int now)
{
    if(lx >= rx || ly >= ry) return;
    if(dep & 1) ans += (rx - lx) * (ry - ly);
    else ans -= (rx - lx) * (ry - ly);
    for(register int i = now; i <= n; ++i)
    {
        DFS(max(lx, x1[i]), min(rx, x2[i]), max(ly, y1[i]), min(ry, y2[i]), dep + 1, i + 1);
    }
    return;
}

int main()
{
    cin >> n;
    for(register int i = 1; i <= n; ++i)
    {
        cin >> x1[i] >> y2[i] >> x2[i] >> y1[i];
    } 
    for(register int i = 1; i <= n; ++i)
    {
        DFS(x1[i], x2[i], y1[i], y2[i], 1, i + 1);
    }
    cout << ans;
    return 0;
}
参考程序

 

转载于:https://www.cnblogs.com/kcn999/p/10584731.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值