USACO Section 3.1 Shaping Regions
来源:互联网 发布:2016外商直接投资数据 编辑:程序博客网 时间:2024/05/21 10:01
题意:
许多不同颜色的矩形放在桌上(可能重叠) 求 能看见的颜色和它的面积
思路:
桌子最大 1W*1W 朴素的做一定会TLE
然后我的直觉告诉我这题是二维线段树 因为要解决区域覆盖问题
可能是由于今年长春站就死在这上对这个很敏感 - -b 不过区域还是太大 空间不够会MLE
因此再想其他方法 发现矩形的数目较少可以从此入手
很容易想到 后加进来的矩形会覆盖前面的矩形 因此我们可以把矩形倒序扫描
然后就剩计算面积这个问题了 借用“切分”等想法可以想到矩形切割
每次将一个新的矩形与之后的矩形比较 切掉相交部分 剩余部分继续递归处理 计算对该颜色的贡献面积
递归的方法很适合“分块”、“切分”等思路的实现 因为递归本来就是“分而治之”的常用手段 以后要注意
代码:
/*ID: housera1PROG: rect1LANG: C++*/#include<cstdio>#include<cstring>#include<algorithm>using namespace std;struct rectangle{int l,r,u,d,c;}f[1010];int n;int col[2510];int dfs(int l,int d,int r,int u,int x){int tmp=0;if(x>n) return (u-d+1)*(r-l+1);if( f[x].d>u || f[x].u<d || f[x].l>r || f[x].r<l ) return dfs(l,d,r,u,x+1);if( f[x].u<u ) tmp+=dfs(l,f[x].u+1,r,u,x+1);if( f[x].d>d ) tmp+=dfs(l,d,r,f[x].d-1,x+1);u=min(u,f[x].u); d=max(d,f[x].d);if( f[x].l>l && f[x].l<=r ) tmp+=dfs(l,d,f[x].l-1,u,x+1);if( f[x].r>=l && f[x].r<r ) tmp+=dfs(f[x].r+1,d,r,u,x+1);return tmp;}int main(){int Debug=0;if(!Debug){freopen("rect1.in","r",stdin);freopen("rect1.out","w",stdout);}int i,j;scanf("%d%d%d",&i,&j,&n);f[0].l=0; f[0].d=0; f[0].r=i-1; f[0].u=j-1; f[0].c=1;for(i=1;i<=n;i++){scanf("%d%d%d%d%d",&f[i].l,&f[i].d,&f[i].r,&f[i].u,&f[i].c);f[i].r--;f[i].u--;}for(i=n;i>=0;i--) col[f[i].c]+=dfs(f[i].l,f[i].d,f[i].r,f[i].u,i+1);for(i=1;i<=2500;i++) if(col[i]) printf("%d %d\n",i,col[i]);return 0;}
0 0
- USACO Section 3.1 Shaping Regions
- usaco Chapter 3 section 3.1 Shaping Regions
- usaco Section 3.1 Shaping Regions -- 矩形切割
- USACO Section 3.1 Shaping Regions - 矩阵切割..
- USACO 3.1 Shaping Regions
- usaco 3.1 Shaping Regions
- USACO 3.1 Shaping Regions
- USACO 3.1.4 Shaping Regions
- USACO 3.1 Shaping Regions (rect1)
- usaco-3.1-PROB Shaping Regions-漂浮法
- 【模拟】【USACO】Shaping Regions
- usaco Shaping Regions
- USACO:Shaping Regions
- USACO-Shaping Regions
- usaco Shaping Regions
- USACO / Shaping Regions (矩形分割)
- USACO Shaping Regions 解题报告
- Shaping Regions Usaco 递归分治
- C++11特性乱弹
- php pdo用法例解
- linux SecureCRT ssh key认证登陆
- 直接拿来用!最火的Android开源项目(一)
- 傅里叶变换(转)
- USACO Section 3.1 Shaping Regions
- 标题: 振兴中华 小明参加了学校的趣味运动会,其中的一个项目是:跳格子。 地上画着一些格子,每个格子里写一个字,如下所示:(也可参见p1.jpg) 从我做起振 我做起振兴 做起
- 直接拿来用!最火的Android开源项目(二)
- 在Hadoop中提升task的启动速度
- 第三章 数据链路层 3.5扩展的以太网
- Yarn框架概述
- 设计模式初探-解释器模式
- CUDA程序优化小记(六)
- 微信5.2 for iPhone 全体验:新增图片墙、语音转文字,可搜索聊天记录,群聊被@会收到提醒