解题报告 Punch
1. 题目 Punch
“在逃离诺莫瑞根的时候,我们留下了太多的数据!非常重要的数据!”大机械师卡斯派普十分着急地说,“尽管我们已经从矩阵打孔计算机上拿回了许多彩色穿孔卡片,但是混乱的数据令人无法忍受!”
自从诺莫瑞根陷落以后,侏儒们一直寄居在铁炉堡中。大机械师卡斯派普花了不少钱来悬赏勇士们去诺莫瑞根替他取回一些卡片,现在他已经有了一大堆彩色穿孔卡片。但是这些卡片都是残缺不全的,有的甚至还是无效的,想从这些破烂中恢复数据,实在是一件不容易的事。卡斯派普发现每个卡片的开头和结尾都有标记,记录着它原本在矩阵打孔计算机中序列的位置,于是想出了一个恢复数据的方法。把每张卡片看成数轴上的一条线段,开头和结尾的标记A,B为数轴上的两个点。卡斯派普按拿到的顺序把卡片一张一张地贴到数轴上,每张卡片的颜色都不同。他想知道贴完卡片以后的数轴上一共有多少种不同的颜色。卡斯派普请你帮助他写一个程序来解决这个问题。
输入格式
l 第1行:一个整数N,表示卡斯派普收集到的卡片的数量。
l 第2行至第N+1行:第i+1行给出了第i张卡片的头尾两个标记Ai,Bi,贴卡片的顺序与输入文件中出现的先后顺序一致。
输出格式
l 一个整数,表示卡斯派普能在数轴上看到的不同的颜色的数目。
样例输入
4
0 5
3 8
5 6
4 7
样例输出
3
2. 题目实质
话说,这一道是正宗的浮水法。
3. 题目来源 Leve
4. 算法
浮水法,没有悬念。
不过这里比较简单,只需要记录某一个线段是不是(或者是有一部分)浮到了最上面。
上浮思想:设竖直平面中存在有一些高度不同的线段,当一个线段上方没有被其他线段挡着时,这个线段就可以上浮,如果一个线段(或是它的一部分)可以上浮到无限高,那么显然,这个线段(或这一部分)所在的高度是他所覆盖的这一个数轴范围内(将平面的无限低的地方看做有一个数轴)最高的。
浮水法其实是一个递归的过程,首先,当一条线段满足上浮的条件时,让他上浮(用 while 循环控制),但是当他不满足上浮的条件时,将他被挡住的那一段切掉,然后接着递归的让他剩下的那部分上浮。
一开始要用排序进行预处理。
因为有高度为零的情况,所以可以一开始先在最底部画一条线段,使这一条线段的初始高度为零,这样应该为零的地方是上浮不起来的。
5. 注意事项
把这个题拿出来主要是想展示一下浮水法的框架。
然后,浮水法也可以用来求面积(横着切完竖着切,不过巨麻烦,详见usaco 3.1.4 形成的区域)。
最后,线段类问题都可以套一下浮水法。
6. 时空复杂度
因为是递归,所以不会分析。
7. 程序代码
Leve (Pascal)
var
x,y:array[0..10000] of longint;
v:array[0..100000] of boolean;
n,i,ans:longint;
procedure cut(xx,yy,t:longint);
begin
if v[i] then exit;
while(t<=n)and((yy<=x[t])or(xx>=y[t])) do inc(t);
if t>n then
begin
inc(ans);
v[i]:=true;
end;
if(xx<x[t])and(yy>x[t]) then cut(xx,x[t],t+1);
if(xx<y[t])and(yy>y[t]) then cut(y[t],yy,t+1);
end;
begin
assign(input,'punch.in');reset(input);
assign(output,'punch.out');rewrite(output);
readln(n);
ans:=1;
for i:=1 to n do
readln(x[i],y[i]);
for i:=n-1 downto 1 do
cut(x[i],y[i],i+1);
writeln(ans);
close(input);close(output);
end.
转载于:https://www.cnblogs.com/SueMiller/archive/2011/08/05/2128794.html
解题报告 Punch相关推荐
- uscao 线段树成段更新操作及Lazy思想(POJ3468解题报告)
线段树成段更新操作及Lazy思想(POJ3468解题报告) 标签: treequerybuildn2cstruct 2011-11-03 20:37 5756人阅读 评论(0) 收藏 举报 分类: ...
- 解题报告(十八)数论题目泛做(Codeforces 难度:2000 ~ 3000 + )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...
- 【解题报告系列】超高质量题单 + 题解(ACM / OI)超高质量题解
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我新写的超高质量的题解和代码,题目难度不 ...
- 解题报告(三)多项式求值与插值(拉格朗日插值)(ACM / OI)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...
- 解题报告(十三)中国剩余定理(ACM / OI)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...
- 解题报告(四)生成函数(ACM/ OI)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...
- 解题报告(八) prufer 序列与 Cayley 公式(ACM / OI)超高质量题解
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- 解题报告(一)E、(BZOJ4589)Hard Nim(博弈论 + FWT)
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- 解题报告(五)组合计数(ACM / OI)超高质量题解
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
最新文章
- 【从蛋壳到满天飞】JS 数据结构解析和算法实现-AVL树(一)
- final 修饰方法参数
- Python的setuptools详解【2】find_packages()
- VC++动态链接库(DLL)编程深入浅出(zz)
- VTK:可视化之MoveActor
- Java与C语言比较(Java参考书中摘录)
- jzoj4673,CF578D-LCS again【统计,字符串,容斥】
- envers_分代缓存和Envers
- 160 - 50 DueList.5
- VSCode调试Python时终端输出中文乱码解决方法1
- gmm中隐变量是什么的_机器学习-隐变量模型和期望最大算法
- 揭秘全球第二大基金公司:先锋基金70人投资团队掌管2万亿美元股票资产
- 踫撞检测 之一 — 关于分离轴理论的解释(Separating Axis Theorem (SAT) Explanation)(完整翻译)
- laravel框架中hasOne和blongTo的用法详解
- WIN10桌面文件夹图标变黑解决方法~
- GIT提交错分支,push错分支怎么办
- 什么是代码,源文件、编辑和编译?
- 90个外国英文网站强力推荐!!!
- HDU 2011 多项式求和
- 使用Highcharts来画一个简易的甘特图
热门文章
- 【已解决】【亲测管用】Windows10无法完成更新,正在撤销更改怎么办?
- 答一名总是半途而废的大二学生:如何坚持,坚持什么
- 新手学习Linux之快速上手分析
- 文字特效-第12届蓝桥杯Scratch国赛真题第1题
- MATLAB 让两个或多个AXES同步旋转
- 电脑c盘满了怎么清理 c盘哪些文件可以删除
- “长光卫星”已完成2.5亿元天使轮融资,已是全国规模最大的民营商业卫星公司... 1
- @Android程序员:到底是Android不行了,还是你跟不上了?
- Spark 读取、写入时序数据库TDengine以及TDengine概述
- Confluent 源码学习 - SinkTask