博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【题解】矩形相交面积
阅读量:4479 次
发布时间:2019-06-08

本文共 1086 字,大约阅读时间需要 3 分钟。

题目描述

  ​有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 
#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

你可能感兴趣的文章
bign(高精度运算模板)
查看>>
git小记
查看>>
个人项目滴总结
查看>>
今晚又一场世纪之战
查看>>
二分搜索应用(旋转数组)——C语言
查看>>
webshell下破解mysql的root密码的php脚本
查看>>
typeHandler
查看>>
java向上取整向下取整
查看>>
Mac在Finder中显示隐藏文件
查看>>
求1...n中因子最多的数
查看>>
冒泡排序
查看>>
C++入门经典-例5.2-使用指针比较两个数的大小
查看>>
6T GPT 移动硬盘在linux下的挂载
查看>>
是懒人造就了方法
查看>>
15个常用GCC命令
查看>>
7-数组
查看>>
ios图片
查看>>
在页面上添加动态时间
查看>>
rem和px
查看>>
Rebranding(字母代换)
查看>>