【HDOJ5714】拍照(线性扫描)
题意:小明在旅游的路上看到了一条美丽的河,河上有许多船只,有的船只向左航行,有的船只向右航行。小明希望拍下这一美丽的风景,并且把尽可能多的船只都完整地拍到一张照片中。
小明位于河的边上,并且可以在河边的任意位置进行拍照,照相机的视野恰好为90度角,只能以垂直于河边的方向进行拍照。河上的船只全都可看作是平行于河边的一条线段,跟河边的距离各不相同,有的正在向左移动,有的正在向右移动,但移动速度恰好都是一样的。小明可以等待恰当的时间让尽量多的船只都走进照相机的视野里,你不需要考虑船只之间会互相遮挡视野的情况。
下面T组数据,对于每组数据:
第一行是一个数n(1≤n≤104),表示船只的数量。
接下来n行,每行四个整数
x,y,z,d(−10^6≤x<y≤10^6,1≤z≤104),表示船只的左端点位置、右端点位置、距离河边的距离,以及航行的方向。d为−1表示向左航行,1表示向右航行。
思路:首先画图


发现船[x,y,z]只有在[y-z,x+z]的区域内能看到
然后因为速度一样,则向同一方向的船只的相对位置是一样的,可以把它们看成线段
正着做一次前缀和,反着做一次,求两个前(后)缀和之和的最大值即可
哈希新姿势
var a,b,c,d,f1,f2,g1,g2,h:array[..]of longint;
hash:array[-..]of longint;
cas,v,n,m,i,tmp,ans,s1,s2,n1,up,x1,y1,z1,d1:longint; procedure swap(var x,y:longint);
var t:longint;
begin
t:=x; x:=y; y:=t;
end; function max(x,y:longint):longint;
begin
if x>y then exit(x);
exit(y);
end; procedure qsort(l,r:longint);
var i,j,mid:longint;
begin
i:=l; j:=r; mid:=h[(l+r)>>];
repeat
while mid>h[i] do inc(i);
while mid<h[j] do dec(j);
if i<=j then
begin
swap(h[i],h[j]);
inc(i); dec(j);
end;
until i>j;
if l<j then qsort(l,j);
if i<r then qsort(i,r);
end; begin
assign(input,'hdoj5714.in'); reset(input);
assign(output,'hdoj5714.out'); rewrite(output);
readln(cas);
for v:= to cas do
begin
readln(n1);
up:=; n:=; m:=;
for i:= to n1 do
begin
readln(x1,y1,z1,d1);
if y1-z1<=x1+z1 then
begin
inc(n); a[n]:=y1-z1; b[n]:=x1+z1; d[n]:=d1;
inc(m); h[m]:=y1-z1;
inc(m); h[m]:=x1+z1;
end;
end;
if m> then qsort(,m);
for i:= to m do
if hash[h[i]]= then
begin
inc(up); hash[h[i]]:=up;
end;
fillchar(f1,sizeof(f1),);
fillchar(f2,sizeof(f2),);
fillchar(g1,sizeof(g1),);
fillchar(g2,sizeof(g2),);
for i:= to n do
if d[i]= then
begin
inc(f1[hash[a[i]]]);
dec(g1[hash[b[i]]]);
end
else
begin
inc(f2[hash[a[i]]]);
dec(g2[hash[b[i]]]);
end;
s1:=; s2:=; ans:=; tmp:=;
for i:= to up do
begin
s1:=s1+f1[i];
tmp:=max(tmp,s1);
s1:=s1+g1[i];
s2:=s2+f2[i];
ans:=max(ans,tmp+s2);
s2:=s2+g2[i];
end;
writeln('Case #',v,':');
writeln(ans);
for i:= to m do hash[h[i]]:=;
end; close(input);
close(output);
end.
【HDOJ5714】拍照(线性扫描)的更多相关文章
- 【hihocoder 1249 Xiongnu's Land】线性扫描
2015区域赛北京赛区的三水,当时在赛场上没做出的原因是复杂度分析不正确导致把方法想复杂了.近来复习复杂度分析,觉得不能只是笼统地看渐进复杂度(big-O),更应根据算法的伪码计算真正的以基本操作数为 ...
- [ An Ac a Day ^_^ ] HihoCoder 1249 Xiongnu's Land 线性扫描
拿到了icpc北京站的参赛名额 感谢亮哥~ 虽然是地狱之战 但也要全力以赴! 题意: 有一片沙漠 n片绿洲 让你用一条线分成两部分 左≥右 而且分割线要尽量靠右 问线的位置 思路: 网上说可以二分 没 ...
- SNF开发平台WinForm-平板拍照及扫描二维码功能
在我们做项目的时候,经常会有移动平板处理检验,审核等,方便移动办公.这时就需要在现场拍照上传问题,把当场问题进行上传,也有已经拍完照的图片或加工过的图片进行上传.还有在车间现场一体机,工控机 这种产物 ...
- 【CF56E】Domino Principle(线性扫描,伪DP)
每块多米诺骨牌所在的位置设为x,每块多米诺骨牌高度为h.如果将x位置上的多米诺骨牌向右翻到,它就可以影响[x+1, x+h-1]范围内的所有多米诺骨牌,让他们也翻到,同时这些被翻到的多米诺骨牌还能影响 ...
- 【CF676C】Vasya and String(二分查找,线性扫描尺取法)
题意: 给出一个长度为n的字符串,只有字符'a'和'b'.最多能改变k个字符,即把'a'变成'b'或把'b'变成'a'. 问改变后的最长连续相同字符的字串长度为多少. 首先是二分查找,好想也好写 .. ...
- UVa 1442 (线性扫描) Cave
对于一个水坑,水平面肯定是相等的.(废话,不然为什么叫水ping面) 因为水面不能碰到天花板,所以将水面向两边延伸要么碰到墙壁要么延伸到洞穴外面去. 设h(i)表示向左延伸不会碰到天花板的最高水平面, ...
- TYVJ P1063 数字串 Label:双指针 线性扫描
描述 给你一个长度为n的数字串,数字串里会包含1-m这些数字.如果连续的一段数字子串包含了1-m这些数字,则称这个数字字串为NUM串.你的任务是求出长度最短的NUM串是什么,只需要输出这个长度即可.1 ...
- ZOJ2965 Accurately Say "CocaCola"! 线性扫描
Accurately Say "CocaCola"! 范围找到:1--700左右,然后打表就ok了 #include<cstdio> #include<cstdl ...
- 【LeetCode】Jump Game (一维动态规划 + 线性扫描)
Given an array of non-negative integers, you are initially positioned at the first index of the arra ...
随机推荐
- Plugging an Unplugged Pluggable Database issue 3
Multitenant Unplug/Plug Best Practices (文档 ID 1935365.1) 1.source 从0419 升级到1019 ,但是datapatch 没有回退041 ...
- C. Dasha and Password 预处理 + dp
http://codeforces.com/contest/761/problem/C 对于每一个字符串,可以预处理出其到达数字,字母,和特殊符号所需的最小步数. 然后就是在n个东西中,选出数字.字母 ...
- easy ui diglog 点击关闭,触发事件
$('#dialogDiv').dialog({ onClose:function(){ alert('11111111') ; }});
- AJPFX解析Java关键字之assert
Java有许多关键字,但是这个关键字估计很少有人了解,今天就跟大家谈一谈这个关键字吧. 先说明一下,这个关键字开发中用的极少,感兴趣的朋友可以了解一下. 一.概述 在C和C++语言中都有assert关 ...
- 5.1点击4个按钮显示相应的div
事件:onclick 属性:display,className 用到for语句,index标记,this当前事件 先清空后附加 <!DOCTYPE html><html>< ...
- mysql 判断null 和 空字符串
1.在mysql中null 不能使用任何运算符与其他字段或者变量(函数.存储过程)进行运算.若使用运算数据就可能会有问题. 2.对null 的判断: 创建一个user表:id 主健 name 可以为空 ...
- 【数据分析 R语言实战】学习笔记 第四章 数据的图形描述
4.1 R绘图概述 以下两个函数,可以分别展示二维,三维图形的示例: >demo(graphics) >demo(persp) R提供了多种绘图相关的命令,可分成三类: 高级绘图命令:在图 ...
- C语言基础-循环结构
循环结构while while循环-图例 while循环-格式 while ( 条件 ) { 语句1; 语句2; .... } 如果条件成立,就会执行循环体中的语句(“循环体”就是while后面大括号 ...
- Sql Server中清空所有数据表中的记录
Sql Server中清空所有数据表中的记录 清空所有数据表中的记录: 代码如下:exec sp_msforeachtable @Command1 ='truncate table ?'删除所有数据 ...
- QPushButton注册事件过滤器后按钮消失
版权声明:本文为博主原创文章,转载需要注明出处. RT,代码如下: ui.btn_set->installEventFilter(this); bool MousrHoverTest::even ...