bzoj3190【JLOI2013】赛车
3190: [JLOI2013]赛车
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 1445 Solved: 454
[Submit][Status][Discuss]
Description
赛道是一条无限长的直线。
最初,gi位于距离起跑线前进ki的位置。比赛開始后。车辆gi将会以vi单位每秒的恒定速度行驶。在这个比赛过程中。假设一辆赛车以前处于领跑位置的话(即没有其它的赛车跑在他的前面),这辆赛车最后就能够得奖,并且比赛过程中不用操心相撞的问题。如今给出全部赛车的起始位置和速度,你的任务就是算出那些赛车将会得奖。
Input
Output
Sample Input
1 1 0 0
15 16 10 20
Sample Output
1 2 4
HINT
对于100%的数据N<=10000, 0<=ki<=10^9, 0<=vi<=10^9
2016.1.17新加数据一组 By Nano_ape
计算几何,维护一个y轴右面的半平面交。
注意两个赛车速度和起始状态都同样的情况。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<vector>
#define F(i,j,n) for(int i=j;i<=n;i++)
#define D(i,j,n) for(int i=j;i>=n;i--)
#define ll long long
#define maxn 10005
#define eps 1e-8
using namespace std;
int n,top,ans[maxn],f[maxn];
struct car{int p,v,id;}a[maxn],s[maxn];
vector<int> v[maxn];
inline int read()
{
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
inline bool cmp(car x,car y)
{
return (x.v==y.v)?x.p>y.p:x.v<y.v;
}
inline double cross(car x,car y)
{
return (double)(x.p-y.p)/(y.v-x.v);
}
int main()
{
n=read();
F(i,1,n) a[i].p=read();
F(i,1,n) a[i].v=read();
F(i,1,n) a[i].id=i,f[i]=i;
sort(a+1,a+n+1,cmp);
s[++top]=a[1];
F(i,2,n)
{
if (a[i].v==a[i-1].v)
{
if (a[i].p==a[i-1].p)
{
v[f[a[i-1].id]].push_back(a[i].id);
f[a[i].id]=f[a[i-1].id];
}
continue;
}
while (top>=2&&cross(s[top],s[top-1])>cross(s[top-1],a[i])) top--;
while (top>=1&&cross(s[top],a[i])<-eps) top--;
s[++top]=a[i];
}
F(i,1,top) ans[i]=s[i].id;
int tt=top;
F(i,1,tt) for(int j=0;j<v[ans[i]].size();j++) ans[++top]=v[ans[i]][j];
sort(ans+1,ans+top+1);
printf("%d\n",top);
F(i,1,top-1) printf("%d ",ans[i]);
printf("%d\n",ans[top]);
return 0;
}
bzoj3190【JLOI2013】赛车的更多相关文章
- BZOJ3190[JLOI2013]赛车
Description 这里有一辆赛车比赛正在进行,赛场上一共有N辆车,分别称为个g1,g2--gn.赛道是一条无限长的直线.最初,gi位于距离起跑线前进ki的位置.比赛开始后,车辆gi将会以vi单位 ...
- BZOJ-3190 [JLOI2013]赛车
转成二元一次不等式组,然后半平面交. #include <cstdlib> #include <cstdio> #include <cmath> #include ...
- 【BZOJ3190】[JLOI2013]赛车 单调栈+几何
[BZOJ3190][JLOI2013]赛车 Description 这里有一辆赛车比赛正在进行,赛场上一共有N辆车,分别称为个g1,g2……gn.赛道是一条无限长的直线.最初,gi位于距离起跑线前进 ...
- 【BZOJ 3190】 3190: [JLOI2013]赛车 (半平面交)
3190: [JLOI2013]赛车 Description 这里有一辆赛车比赛正在进行,赛场上一共有N辆车,分别称为个g1,g2--gn.赛道是一条无限长的直线.最初,gi位于距离起跑线前进ki的位 ...
- bzoj 3190 [JLOI2013]赛车 半平面交+细节处理
题目大意 这里有一场赛车比赛正在进行,赛场上一共有N辆车,分别称为g1,g2--gn.赛道是一条无限长的直线.最初,gi位于距离起跑线前进ki的位置.比赛开始后,车辆gi将会以vi单位每秒的恒定速度行 ...
- P3256 [JLOI2013]赛车
传送门 如果把速度看成斜率,起始位置看成截距,这就是一个水平可见直线了-- 不过这题里我实现方法借鉴了CQzhangyu大佬的,先按速度排序,然后维护一个单调栈,如果当前的人速度比栈顶大距离又比它远直 ...
- 【bzoj5089】最大连续子段和 分块+单调栈维护凸包
题目描述 给出一个长度为 n 的序列,要求支持如下两种操作: A l r x :将 [l,r] 区间内的所有数加上 x : Q l r : 询问 [l,r] 区间的最大连续子段和. 其中,一 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 刷题总结——赛车(bzoj3190)
题目: 题目背景 JLOI2013 T1 题目描述 这里有一辆赛车比赛正在进行,赛场上一共有 N 辆车,分别称为 g1,g2,……,gn.赛道是一条无限长的直线.最初,gi 位于距离起跑线前进 ki ...
随机推荐
- docker 容器挂载主机目录,访问出现 cannot open directory /mnt/home/webroot/: Permission denied 的解决办法
问题原因及解决办法 原因是CentOS7中的安全模块selinux把权限禁掉了,至少有以下三种方式解决挂载的目录没有权限的问题: 1.在运行容器的时候,给容器加特权,及加上 --privileged= ...
- 机器学习_决策树Python代码详解
决策树优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据: 决策树缺点:可能会产生过度匹配问题. 决策树的一般步骤: (1)代码中def 1,计算给定数据集的香农熵: ...
- python练习1 登录和三级菜单
,: username1 = input("请输入您的用户名:")# password1 = getpass.getpass("请输入您的密码:") passw ...
- eclipse中同步代码PULL报错checkout conflict with files的解决方法
1.Team--->Synchronize Workspace 2.在同步窗口找到冲突文件,把自己本地修改的复制出来 3.在文件上右键选择 Overwrite----->Yes , 4.再 ...
- 第2节 hive基本操作:6、7、8
第1节 hive安装:6.hive的基本操作:7.创建数据库的语法:8.hive当中创建内部表的语法. hive的基本操作: 创建数据库与创建数据库表操作 创建数据库操作:create databas ...
- 第2节 mapreduce深入学习:14、mapreduce数据压缩-使用snappy进行压缩
第2节 mapreduce深入学习:14.mapreduce数据压缩-使用snappy进行压缩 文件压缩有两大好处,节约磁盘空间,加速数据在网络和磁盘上的传输. 方式一:在代码中进行设置压缩 代码: ...
- C#导出word [无规则表结构+模板遇到的坑]
1)当然可以考虑使用aspose.word.使用书签替换的方案替换模板中对应的书签值. 2)但是我使用了Interop.Word,下面记录使用类及要注意的地方 3)使用类 Report.cs 来自于网 ...
- [python] 时间序列分析之ARIMA
1 时间序列与时间序列分析 在生产和科学研究中,对某一个或者一组变量 进行观察测量,将在一系列时刻 所得到的离散数字组成的序列集合,称之为时间序列. 时间序列分析是根据系统观察得到的时间序列数据, ...
- 【PS切图】前端工程师必备,但又无需精通的一项技能。
前端主要从事一些代码开发工作,PS使用是前端工程师必备,但又无需精通的一项技能. 前端切图四大面板:在“窗口”菜单下开启 1,信息(手动开启)2,字符(手动开启)3,历史记录(手动开启)4,图层(默认 ...
- JS 水印图片合成实例页面
CSS代码: .clip { position: absolute; clip: rect(0 0 0 0); } HTML代码: <input type="file" id ...