【描述】

          N个不同的颜色的不透明的长方形(1 <= N <= 1000)被放置在一张宽为A长为B的白纸上。
这些长方形被放置时,保证了它们的边于白纸的边缘平行。
所有的长方形都放置在白纸内,所以我们会看到不同形状的各种颜色。(颜色用[1,1000]内的整数表示)
坐标系统的原点(0,0)设在这张白纸的左下角,而坐标轴则平行于边缘。
 

【格式】

PROGRAM NAME: rect1
INPUT FORMAT:(file rect1.in)
 
每行输入的是放置长方形的方法。
第一行输入的是那个放在底的长方形(即白纸)。

第 1 行: A , B 和 N, 由空格分开 (1 <=A, B<=10,000)
第 2 到N+1行: 为五个整数 llx, lly, urx, ury, color 这是一个长方形的左下角坐标,右上角坐标和颜色。
颜色 1和底部白纸的颜色相同。
OUTPUT FORMAT:(file rect1.out)

输出文件应该包含一个所有能被看到颜色连同该颜色的总面积的清单( 即使颜色的区域不是连续的),按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】形成的区域的更多相关文章

  1. USACO翻译:USACO 2014 DEC Silver三题

    USACO 2014 DEC SILVER 一.题目概览 中文题目名称 回程 马拉松 奶牛慢跑 英文题目名称 piggyback marathon cowjog 可执行文件名 piggyback ma ...

  2. USACO翻译:USACO 2012 FEB Silver三题

    USACO 2012 FEB SILVER 一.题目概览 中文题目名称 矩形草地 奶牛IDs 搬家 英文题目名称 planting cowids relocate 可执行文件名 planting co ...

  3. USACO翻译:USACO 2014 JAN三题(2)

    USACO 2014 JAN 一.题目概览 中文题目名称 队伍平衡 滑雪录像 滑雪场建设 英文题目名称 bteams recording skicourse 可执行文件名 bteams recordi ...

  4. USACO比赛题泛刷

    随时可能弃坑. 因为不知道最近要刷啥所以就决定刷下usaco. 优先级排在学习新算法和打比赛之后. 仅有一句话题解.难一点的可能有代码. 优先级是Gold>Silver.Platinum刷不动. ...

  5. USACO 6.1 A Rectangular Barn

    A Rectangular Barn Mircea Pasoi -- 2003 Ever the capitalist, Farmer John wants to extend his milking ...

  6. USACO 6.4 章节

    The Primes 题目大意 5*5矩阵,给定左上角 要所有行,列,从左向右看对角线为质数,没有前导零,且这些质数数位和相等(题目给和) 按字典序输出所有方案... 题解 看上去就是个 无脑暴搜 题 ...

  7. 修理牛棚 贪心 USACO

    今天开始终于可以刷USACO的题啦 准备每一道都发一个题解 1010: 1.3.2 Barn Repair 修理牛棚 时间限制: 1 Sec  内存限制: 128 MB提交: 9  解决: 7[提交] ...

  8. 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 ...

  9. .Net Core MVC 网站开发(Ninesky) 2.2、栏目管理功能-System区域添加

    在asp或asp.net中为了方便网站的结构清晰,通常把具有类似功能的页面放到一个文件夹中,用户管理功能都放在Admin文件夹下,用户功能都放在Member文件夹下,在MVC中,通常使用区域(Area ...

随机推荐

  1. Linxu安装Lamp环境

    安装MySQL数据库 sudo apt-get install mysql-server mysql-client 下图为提示输入数据库密码,然后回车,之后还有提示,再重复输入一次,再回车 最后安装完 ...

  2. AJAX 中Sys.WebForms.PageRequestManager的事件激发顺序 《转》

    AJAX 中Sys.WebForms.PageRequestManager的事件激发顺序 测试代码: 测试代码如下: <%@ Page Language="C#" AutoE ...

  3. hdu-3046-Pleasant sheep and big big wolf(最大流最小割)

    题意: 给出最少栏杆数使狼和羊分离 分析: 将狼与源点连,羊与汇点连,容量都为无穷,将图的各个相邻点连接,容量为1 然后题目就转化成最小去掉多少条边使不连通,即求最小割最大流. // File Nam ...

  4. 动态规划(方案还原):SGU 104 Little shop of flowers

    花店橱窗布置问题 时间限制:3000 ms 问题描述(Problem)    假设你想以最美观的方式布置花店的橱窗,你有F束花,每束花的品种都不一样,同时,你至少有同样数量的花瓶,被按顺序摆成一行.花 ...

  5. 导出Excel文件,npoi方式和通过microsoft.visual basic.dll

    一:例子截图: 二:NPOI截图 三:EmployeeListWindow.cs代码 using System; using System.Collections.Generic; using Sys ...

  6. Count Primes ——LeetCode

    Description: Count the number of prime numbers less than a non-negative number, n. 题目大意:给一个int,返回小于它 ...

  7. Android从网络中获取xml文件并解析数据

    public class XmlwebData { @SuppressLint("UseValueOf") public static List<Person> get ...

  8. A Mini Locomotive(动态规划 01)

     /*  题意:选出3个连续的 数的个数  为K的区间,使他们的和最大 分析: dp[j][i]=max(dp[j-k][i-1]+value[j],dp[j-1][i]);   dp[j][i]:从 ...

  9. [JAVA关键字] static & final

    JAVA十分常见的关键字static & final 总的来说final表示常量,即不可更改的:而static表示静态,即全局的 1. final 类:不能被继承 2. final 方法:能被 ...

  10. UIView和CALayer有什么关系

    view是对layer的一种封装,你对view的很多操作事实上是对layer的操作,之所以会出现这两个东西是因为1.view支持很多手势的交互,你所操作iphone的各种点击,拖动等等.2.layer ...