【USACO 3.1.4】形成的区域
【描述】
这些长方形被放置时,保证了它们的边于白纸的边缘平行。
所有的长方形都放置在白纸内,所以我们会看到不同形状的各种颜色。(颜色用[1,1000]内的整数表示)
坐标系统的原点(0,0)设在这张白纸的左下角,而坐标轴则平行于边缘。
【格式】
第一行输入的是那个放在底的长方形(即白纸)。
| 第 1 行: | A , B 和 N, 由空格分开 (1 <=A, B<=10,000) |
| 第 2 到N+1行: | 为五个整数 llx, lly, urx, ury, color 这是一个长方形的左下角坐标,右上角坐标和颜色。 颜色 1和底部白纸的颜色相同。 |
输出文件应该包含一个所有能被看到颜色连同该颜色的总面积的清单( 即使颜色的区域不是连续的),按color的增序顺序。
不要显示没有区域的颜色。
【分析】
本来想用离散化的,结果发现会超时...
借鉴了一个很好的思想,漂浮法。
漂浮法:以逆序来进行放置,即n to 1。逆序的好处在于放置一个矩形后,俯视看到的就是最终俯视该矩形应该看到的。因为挡着它的矩形在之前已经放置好了,所以可直接统计,为递归创造了条件。每放一个矩形,可以想象成将其扔入一密度很大的海水底部,海分成了n层,然后矩形开始向上浮。在上浮过程中若碰撞到其他的矩形则断裂成几个小矩形,继续上浮,直到浮出水面。用递归来模拟上浮过程。
#include <cstdlib>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
const int maxn=+;
using namespace std;
int lx[maxn],ly[maxn],rx[maxn],ry[maxn];
int color[maxn]={},S[],N;
//前四个为矩形的坐标颜色
void cover(int x1,int y1,int x2,int y2,int c,int h)
{
if (x1==x2 || y1==y2) return;//去掉面积为0的矩阵
if (h>N) S[c]+=(y2-y1)*(x2-x1);
else
{
//断裂成四个小矩形
if (y1<ly[h]) cover(min(rx[h],x1),y1,min(rx[h],x2),min(ly[h],y2),c,h+);
if (x2>rx[h]) cover(max(rx[h],x1),min(ry[h],y1),x2,min(ry[h],y2),c,h+);
if (y2>ry[h]) cover(max(lx[h],x1),max(ry[h],y1),max(lx[h],x2),y2,c,h+);
if (x1<lx[h]) cover(x1,max(ly[h],y1),min(lx[h],x2),max(ly[h],y2),c,h+);
}
}
int main()
{
int i;
//文件操作
freopen("rect1.in","r",stdin);
freopen("rect1.out","w",stdout); scanf("%d%d%d",&rx[],&ry[],&N);//白纸
for (i=;i<=N;i++) scanf("%d%d%d%d%d",&lx[i],&ly[i],&rx[i],&ry[i],&color[i]); S[color[N]]+=(rx[N]-lx[N])*(ry[N]-ly[N]);//最后一张纸 for (i=N-;i>=;i--) cover(lx[i],ly[i],rx[i],ry[i],color[i],i+);
for (i=;i<=maxn;i++) if (S[i]!=) printf("%d %d\n",i,S[i]);
return ;
}
【USACO 3.1.4】形成的区域的更多相关文章
- USACO翻译:USACO 2014 DEC Silver三题
USACO 2014 DEC SILVER 一.题目概览 中文题目名称 回程 马拉松 奶牛慢跑 英文题目名称 piggyback marathon cowjog 可执行文件名 piggyback ma ...
- USACO翻译:USACO 2012 FEB Silver三题
USACO 2012 FEB SILVER 一.题目概览 中文题目名称 矩形草地 奶牛IDs 搬家 英文题目名称 planting cowids relocate 可执行文件名 planting co ...
- USACO翻译:USACO 2014 JAN三题(2)
USACO 2014 JAN 一.题目概览 中文题目名称 队伍平衡 滑雪录像 滑雪场建设 英文题目名称 bteams recording skicourse 可执行文件名 bteams recordi ...
- USACO比赛题泛刷
随时可能弃坑. 因为不知道最近要刷啥所以就决定刷下usaco. 优先级排在学习新算法和打比赛之后. 仅有一句话题解.难一点的可能有代码. 优先级是Gold>Silver.Platinum刷不动. ...
- USACO 6.1 A Rectangular Barn
A Rectangular Barn Mircea Pasoi -- 2003 Ever the capitalist, Farmer John wants to extend his milking ...
- USACO 6.4 章节
The Primes 题目大意 5*5矩阵,给定左上角 要所有行,列,从左向右看对角线为质数,没有前导零,且这些质数数位和相等(题目给和) 按字典序输出所有方案... 题解 看上去就是个 无脑暴搜 题 ...
- 修理牛棚 贪心 USACO
今天开始终于可以刷USACO的题啦 准备每一道都发一个题解 1010: 1.3.2 Barn Repair 修理牛棚 时间限制: 1 Sec 内存限制: 128 MB提交: 9 解决: 7[提交] ...
- NC24017 [USACO 2016 Jan S]Angry Cows
NC24017 [USACO 2016 Jan S]Angry Cows 题目 题目描述 Bessie the cow has designed what she thinks will be the ...
- .Net Core MVC 网站开发(Ninesky) 2.2、栏目管理功能-System区域添加
在asp或asp.net中为了方便网站的结构清晰,通常把具有类似功能的页面放到一个文件夹中,用户管理功能都放在Admin文件夹下,用户功能都放在Member文件夹下,在MVC中,通常使用区域(Area ...
随机推荐
- 【HDOJ】1484 Basic wall maze
BFS. /* 1484 */ #include <iostream> #include <queue> #include <string> #include &l ...
- Gvim一些基本配置
介绍一些关于Gvim(windows 7 32位 Vim 7.4)的基本配置,除了特别说明,代码一律添加在安装目录下的_vimrc文件中. 1.取消自动备份,这行代码需要添加在 _vimrc文件中的b ...
- Javascript之return
做表单验证的时候,除了错误提示之外,还要做的一点就是避免表单提交. 如果避免表单提交呢? 有一个方法很简单,就是return 我们来看一下代码: $(".make_sure").c ...
- 数学(莫比乌斯反演):HAOI 2011 问题B
题目描述: 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. 输入格式: 第一行一个整数n,接下来n ...
- Java---实力弹弹球,弹弹弹
直接上代码了. 微调按钮加画布画几个圆,再实现监听... package cn.hncu.threadDemo.thread2; import java.awt.Canvas; import java ...
- 动态规划——H 最少回文串
We say a sequence of characters is a palindrome if it is the same written forwards and backwards. Fo ...
- poj3261 Milk Patterns(后缀数组)
[题目链接] http://poj.org/problem?id=3261 [题意] 至少出现k次的可重叠最长子串. [思路] 二分长度+划分height,然后判断是否存在一组的数目不小于k即可. 需 ...
- java迭代器demo
package cn.aust.zyw.demo; import java.util.Iterator; /** * Created by zyw on 2016/2/16. * Iterator模式 ...
- warning: Could not canonicalize hostname: vpn
warning: Could not canonicalize hostname: vpn vim /etc/hosts 127.0.0.1 hostname
- javaweb笔记4之httpservlet
1 httpservlet简介 service方法是Servlet的入口方法,调用servlet会首先调用service方法.在service方法中,会根据请求方式分别调用不同的doXXX方法.例如, ...