hdu5714 拍照[2016百度之星复赛C题]
由于船移动的速度都一样,那么对于往一个方向的船相对距离其实是不变的,我们可以把往一个方向移动的船都视作静止,并求出在哪些观测位置可以看到,很明显对于船[x,y,z],当x+z>=y-z的时候,可以在[y-z,x+z]这些位置观测到它,这些位置的观测数全都+1,然后考虑不同方向,假设初始在x位置观测往右的船,在y位置观测到往左的船,只要x<=y,则经过一段时间的移动,必然存在一个位置可以同时观测到x位置和y位置能观测到的船。复杂度O(nlogn)。
代码
#include<cstdio>
#include<algorithm>
#include<queue>
#include<map>
#define mp make_pair
#define pb push_back
#define fi first
#define sc second
using namespace std;
const int N = ;
const int M = ;
int test,a,b,c,d,i,f1[N],f2[N],g1[N],g2[N],n,s1[N],s2[N],tmp,ans,ii,tot;
int cnt1,cnt2,tt,ttt,vv[N];
struct g{
int l,r,id;
}v[N];
map<int,int> ma;
int main()
{
scanf("%d",&test);
while (test--)
{
scanf("%d",&n);
tt=;ttt=;ma.clear();tot=;
for (i=;i<=n;i++)
{
scanf("%d%d%d%d",&a,&b,&c,&d);
if (a+c>=b-c)
{
tot++;
v[tot].l=b-c;
v[tot].r=a+c;
v[tot].id=d;
vv[++tt]=b-c;
vv[++tt]=a+c;
}
}
sort(vv+,vv++tt);
for (i=;i<=tt;i++)
if (ma[vv[i]]==) ma[vv[i]]=++ttt;
for (i=;i<=tot;i++)
if (v[i].id==)
{
f1[ma[v[i].l]]++;
g1[ma[v[i].r]]--;
}
else
{
f2[ma[v[i].l]]++;
g2[ma[v[i].r]]--;
}
tmp=ans=cnt1=cnt2=;
for (i=;i<=ttt;i++)
{
cnt1+=f1[i];
s1[i]=cnt1;
cnt1+=g1[i];
cnt2+=f2[i];
s2[i]=cnt2;
cnt2+=g2[i];
if (s1[i]>tmp) tmp=s1[i];
ans=max(ans,tmp+s2[i]);
f1[i]=f2[i]=g1[i]=g2[i]=;
}
ii++;
printf("Case #%d:\n%d\n",ii,ans);
}
}
hdu5714 拍照[2016百度之星复赛C题]的更多相关文章
- hdu5713 K个联通块[2016百度之星复赛B题]
dp 代码 #include<cstdio> ; ; int n,m,k,cnt[N]; ]; ][],i,j,l,a,b; int check(int x,int y) { int i; ...
- hdu5715 XOR 游戏 [2016百度之星复赛D题]
比赛的时候没仔细想,赛后一想这题其实挺简单的,先求出序列的异或前缀和,然后将异或前缀和建出一颗trie树,然后我们可以二分答案,把问题变成判定性问题,判定是否存在一种方案,使得所有的分组的异或和都大 ...
- 2016"百度之星" - 复赛(Astar Round3) 1003 拍照
拍照 思路:先静态,离线树状数组,分别统计每个点向左向右能看到的船的数量.再枚举整个区间求最大值. 应为人和船都是动态的,假设船往左走,处理每个点看到向左最大船的数量,满足动态条件.就是向左的船一开始 ...
- 2016百度之星 初赛2A ABEF
只做了1001 1002 1005 1006.剩下2题可能以后补? http://acm.hdu.edu.cn/search.php?field=problem&key=2016%22%B0% ...
- 2016百度之星 资格赛ABCDE
看题:http://bestcoder.hdu.edu.cn/contests/contest_show.php?cid=690 交题:http://acm.hdu.edu.cn/search.php ...
- HDU 5690:2016"百度之星" - 初赛 All X
原文链接:https://www.dreamwings.cn/hdu5690/2657.html All X Time Limit: 2000/1000 MS (Java/Others) Mem ...
- HDU 5688:2016"百度之星" - 资格赛 Problem D
原文链接:https://www.dreamwings.cn/hdu5688/2650.html Problem D Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 5686:2016"百度之星" - 资格赛 Problem B
原文链接:https://www.dreamwings.cn/hdu5686/2645.html Problem B Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 5685:2016"百度之星" - 资格赛 Problem A
原文链接:https://www.dreamwings.cn/hdu5685/2637.html Problem A Time Limit: 2000/1000 MS (Java/Others) ...
随机推荐
- BZOJ2087 : [Poi2010]Sheep
一条边能连上当且仅当它没有经过任何点,并且两边的点都是偶数个. 枚举原点,通过极角排序求出哪些边是合法的,然后区间DP即可. 时间复杂度$O(nm\log m+n^3)$. #include<c ...
- Simplify Path
Given an absolute path for a file (Unix-style), simplify it. For example, path = "/home/", ...
- ubuntu开启SSH服务
SSH分客户端openssh-client和openssh-server 如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果没有则sudo apt-g ...
- VS2010中,无法嵌入互操作类型“……”,请改用适用的接口的解决方法(转自网络)
最近开始使用VS2010,在引用COM组件的时候,出现了无法嵌入互操作类型“……”,请改用适用的接口的错误提示.查阅资料,找到解决方案,记录如下: 选中项目中引入的dll,鼠标右键,选择属性,把“嵌入 ...
- mysql优化杂记
一.mysqladmin的使用#mysqladmin extended-status -u root -i 2 -c 2 -p | grep connect查看mysql的状态中带有connect字符 ...
- JAVA算法
一.归并排序 归并排序 (merge sort) 是一类与插入排序.交换排序.选择排序不同的另一种排序方法.归并的含义是将两个或两个以上的有序表合并成一个新的有序表.归并排序有多路归并排序.两路归并 ...
- 安装GIT,集成到Powershell中
1.首先安装GIT http://msysgit.github.io 下载最新版,然后安装.没什么好说的. 装完之后,把 安装路径/bin 加入到环境变量的Path中 2.删除Git的右键菜单 安装完 ...
- SQL CREATE TABLE 语句\SQL 约束 (Constraints)\SQL NOT NULL 约束\SQL UNIQUE 约束
CREATE TABLE 语句 CREATE TABLE 语句用于创建数据库中的表. SQL CREATE TABLE 语法 CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据 ...
- 微信小程序时代已经来临
昨天估计微信公众号上产生了第一篇最快的30万+文章,10万+只花了10多分钟.就是冯大辉(著名Oracle专家,知名博主)同学的「微信应用号来了」. 为什么这么一篇如此简单又技术类的文章一下能刷遍朋友 ...
- 【Android测试】Android截图的深水区
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/6113059.html 需求 这两天遇到这样一个事情,因为某 ...