sgu 177 Square 矩形切割
来源:互联网 发布:阿里妈妈淘宝客违规 编辑:程序博客网 时间:2024/04/29 16:55
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,c); xt=x2[d]; } if (ys<y1[d]) slove(xs,ys,xt,y1[d],d+1,c); if (yt>y2[d]) slove(xs,y2[d],xt,yt,d+1,c);}int main(){// freopen("in.txt","r",stdin); scanf("%d%d",&n,&m); cnt=0; for (int i=1; i<=m; i++) { scanf("%d%d%d%d",&x1[i],&y1[i],&x2[i],&y2[i]); if (x1[i]>x2[i]) swap(x1[i],x2[i]); if (y1[i]>y2[i]) swap(y1[i],y2[i]); x2[i]++; y2[i]++; scanf("%s",c); if (c[0]=='b') col[i]=1; else col[i]=0; } for (int i=m; i>=1; i--) { if (col[i]) slove(x1[i],y1[i],x2[i],y2[i],i+1,1); } cout<<n*n-cnt<<endl; return 0;}
0 0
- sgu 177 Square 矩形切割
- SGU 177 Square(并查集)
- 矩形切割
- 矩形切割
- 线段切割&&矩形切割
- 【矩形切割】卫星覆盖
- 【矩形切割】Atlantis
- POJ3277(矩形切割)
- HDU3634(矩形切割)
- POJ 1151 矩形切割
- [POJ1151] Atlantis - 矩形切割
- [codevs3235] 战争 - 矩形切割
- sgu177:Square(矩形分割)
- POJ1151(矩形切割入门题)
- POJ3695(矩形切割中等题)
- ural1147(Shaping Regions)矩形切割
- 矩形切割-面积求并
- POJ 3695 Rectangles(矩形切割)
- 使用gSOAP开发实例(4) iconv解决中文乱码问题(续)
- Section 1.1 Greedy Gift Givers
- 使用gSOAP开发实例(5) libxml2解析SOAP响应消息
- MPI二维笛卡尔坐标划分【1】
- 使用gSOAP开发实例(6) 在HP-UX下编译gSOAP-2.7.17
- sgu 177 Square 矩形切割
- 使用gSOAP开发实例(7) 基于HTTPS的基本认证(Basic Authentication)
- 黑马程序员-java-20—30岁计划
- 移动的小球
- 使用gSOAP开发实例(8) Phase 1 完结篇 自定义header实现用户名令牌认证(Usernametoken Authentication)
- Easy Starter Css Templates
- 总结一下通过系统架构师考试的经验
- IE特性检测的那些事
- 动态规划-基础篇——最长上升子序列(nlogn)