Problem Description

小明在旅游的路上看到了一条美丽的河,河上有许多船只,有的船只向左航行,有的船只向右航行。小明希望拍下这一美丽的风景,并且把尽可能多的船只都完整地拍到一张照片中。

小明位于河的边上,并且可以在河边的任意位置进行拍照,照相机的视野恰好为90度角,只能以垂直于河边的方向进行拍照。河上的船只全都可看作是平行 于河边的一条线段,跟河边的距离各不相同,有的正在向左移动,有的正在向右移动,但移动速度恰好都是一样的。小明可以等待恰当的时间让尽量多的船只都走进 照相机的视野里,你不需要考虑船只之间会互相遮挡视野的情况。

Input

第一行为TTT,表示输入数据组数。

下面TTT组数据,对于每组数据:

第一行是一个数n(1≤n≤104)n(1\leq n\leq 10^{4})n(1≤n≤10​4​​),表示船只的数量。

接下来nnn行,每行四个整数 x,y,z,d(−106≤x<y≤106,1≤z≤104)x,y,z,d(-10^{6}\leq x < y \leq 10^{6},1\leq z\leq 10^{4})x,y,z,d(−10​6​​≤x<y≤10​6​​,1≤z≤10​4​​),表示船只的左端点位置、右端点位置、距离河边的距离,以及航行的方向。ddd为−1-1−1表示向左航行,111表示向右航行。

Output

对第iii组数据,输出

Case #i:

然后输出一行,仅包含一个整数,表示最多可以拍到多少完整的船只。

Sample Input
3
2
1 3 1 1
2 4 1 -1
2
1 3 1 -1
2 4 1 1
1
1 4 1 1
Sample Output
Case #1:
2
Case #2:
1
Case #3:
0 Solution:
考虑一条静止的船,容易求出在河岸上能完整拍到这条船的位置范围[L, R],当这条船运动时,区间[L, R]也随之以相同的速度在河岸上移动。
考虑所有向左运动的船,它们对应的区间[L, R]是相对静止的,将这些区间的并看成一个整体,称为左点集;同理,所有向右运动的船对应的区间[L, R]的并也可看成一个整体,称为右点集,这两个点集(中的点)分别向左和向右运动。
我们假设相机固定在左点集中的某个点p,初始时刻右点集中在p左边(包括和p重合)的点,都必定会和p相遇。这样在p点所能(完整)拍到的最大船数就是,p点所能拍到的左行
的船数加上右点集中p左边(包括和p重合)的点上所能拍到的右行的船数的最大值。
实际上,我们没必要枚举左点集中的每一个点,只要枚举其中左行船对应的区间[L, R]的端点即可,换言之,可把左点集重定义成左行船对应的区间[L, R]的端点的集合。
右点集亦可做同样处理。 Implementation:
区间端点离散化, 差分序列
#include <cstdio>
#include <iostream>
#include <vector>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
const int N(1e4+), M();
int a[*N], b[*N]; inline int id(int x){
return x+M;
} vector<int> c;
int x[N], y[N], z[N], d[N]; int main(){
int T, n, m;
int cs=;
for(scanf("%d", &T); T--; ){
scanf("%d", &n);
printf("Case #%d:\n", ++cs);
memset(a, , sizeof(a));
memset(b, , sizeof(b));
c.clear();
for(int i=; i<n; i++){
scanf("%d%d%d%d", x+i, y+i, z+i, d+i);
int R=x[i]+z[i], L=y[i]-z[i];
if(L>R) continue;
c.push_back(R), c.push_back(L);
} sort(c.begin(), c.end());
int e=unique(c.begin(), c.end())-c.begin(); for(int i=; i<n; i++){
int R=x[i]+z[i], L=y[i]-z[i];
if(L>R) continue;
int id1=lower_bound(c.begin(), c.begin()+e, L)-c.begin();
int id2=upper_bound(c.begin(), c.begin()+e, R)-c.begin();
if(d[i]==-){
a[id1]++;
a[id2]--;
}
else{
b[id1]++;
b[id2]--;
}
}
int ans=;
for(int i=; i<e; i++)
a[i]+=a[i-], b[i]+=b[i-];
for(int i=; i<e; i++){
b[i]=max(b[i], b[i-]);
}
for(int i=; i<e; i++)
ans=max(ans, a[i]+b[i]);
cout<<ans<<endl;
}
return ;
}

HDU 5714的更多相关文章

  1. HDU 5714 拍照 前缀和

    拍照 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5714 Description 小明在旅游的路上看到了一条美丽的河,河上有许多船只,有的船只向左 ...

  2. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  3. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  4. hdu 4859 海岸线 Bestcoder Round 1

    http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...

  5. HDU 4569 Special equations(取模)

    Special equations Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  6. HDU 4006The kth great number(K大数 +小顶堆)

    The kth great number Time Limit:1000MS     Memory Limit:65768KB     64bit IO Format:%I64d & %I64 ...

  7. HDU 1796How many integers can you find(容斥原理)

    How many integers can you find Time Limit:5000MS     Memory Limit:32768KB     64bit IO Format:%I64d ...

  8. hdu 4481 Time travel(高斯求期望)(转)

    (转)http://blog.csdn.net/u013081425/article/details/39240021 http://acm.hdu.edu.cn/showproblem.php?pi ...

  9. HDU 3791二叉搜索树解题(解题报告)

    1.题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=3791 2.参考解题 http://blog.csdn.net/u013447865/articl ...

随机推荐

  1. Sql注入截取字符串常用函数

    在sql注入中,往往会用到截取字符串的问题,例如不回显的情况下进行的注入,也成为盲注,这种情况下往往需要一个一个字符的去猜解,过程中需要用到截取字符串.本文中主要列举三个函数和该函数注入过程中的一些用 ...

  2. win7系统电脑连接小米蓝牙音箱

    一.买好蓝牙适配器,插到电脑上. 二.右下角工具栏找到蓝牙图标 三.右键这个图标,选择'显示Bluetooth设备' 四.找到小米蓝牙音箱 'NDZ-030-AA' 五.双击打开它,然后选择'服务'选 ...

  3. S2小测--索引--视图

    1.  关于Sql server 视图 视图是一个虚拟表,我们在查询视图的时候,实际上是对基础表的查询.视图不仅可以作为SELECT查询的目标,也可以作为修改语句的目 标.理论上它可以像普通的物理表一 ...

  4. write_back 浅浅分析

    hon@hon:~/f2fs$ grep -i "clearpagedirty" . -nr./mm/shmem.c:1240: ClearPageDirty(page);./mm ...

  5. Java反射机制的学习

    Java反射机制是Java语言被视为准动态语言的关键性质.Java反射机制的核心就是允许在运行时通过Java Reflection APIs来取得已知名字的class类的相关信息,动态地生成此类,并调 ...

  6. 移动Web 开发中的一些前端知识收集汇总

    在开发DeveMobile 与EaseMobile 主题 的时候积累了一些移动Web 开发的前端知识,本着记录总结的目的,特写这篇文章备忘一下. 要说移动Web 开发与传统的PC 端开发,感觉也没什么 ...

  7. ASP.NET中进行消息处理(MSMQ) 三

    在本文的前两篇文章里对MSMQ的相关知识点进行了介绍,很多阅读过这前两篇文章的朋友都曾问到过这样一些问题:  1.如何把MSMQ应用到实际的项目中去呢?  2.可不可以介绍一个实际的应用实例?  3. ...

  8. Androd Studio layout页面布局无法预览

    Could not initialize class android.support.v7.internal.widget.ActionBarOverlayLayout 导致无法看到布局页面,解决方法 ...

  9. IOS-一步一步教你自定义评分星级条RatingBar ——转载的

    由于项目的需要,需要设计能评分.能显示评分数据的星级评分条,但是IOS上好像没有这个控件,Android是有RatingBar这个控件的(又发现一个IOS不如Android好的),那就只能自定义了,在 ...

  10. TPLINK GPL code 简要分析

    从TPLINK官网下载了GPL code,下载后文件名是wr841nv9_en_gpl.tar.gz, 但是无论是linux还是windows下解压都提示压缩包有问题,不过还是可以解压出完整的目录的. ...