3190: [JLOI2013]赛车

Time Limit: 10 Sec  Memory Limit: 128 MB

Submit: 1445  Solved: 454

[Submit][Status][Discuss]

Description

 
这里有一辆赛车比赛正在进行,赛场上一共同拥有N辆车,分别称为个g1。g2……gn。

赛道是一条无限长的直线。

最初,gi位于距离起跑线前进ki的位置。比赛開始后。车辆gi将会以vi单位每秒的恒定速度行驶。在这个比赛过程中。假设一辆赛车以前处于领跑位置的话(即没有其它的赛车跑在他的前面),这辆赛车最后就能够得奖,并且比赛过程中不用操心相撞的问题。如今给出全部赛车的起始位置和速度,你的任务就是算出那些赛车将会得奖。

 

Input

第一行有一个正整数N表示赛车的个数。
接下来一行给出N个整数,按顺序给出N辆赛车的起始位置。
再接下来一行给出N个整数,按顺序给出N辆赛车的恒定速度。
 

Output

 
输出包含两行,第一行为获奖的赛车个数。
第二行按从小到大的顺序输出获奖赛车的编号,编号之间用空格隔开。注意最后一个编号后面不要加空格。
 
 

Sample Input

4

1 1 0 0

15 16 10 20


Sample Output

3

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】赛车的更多相关文章

  1. BZOJ3190[JLOI2013]赛车

    Description 这里有一辆赛车比赛正在进行,赛场上一共有N辆车,分别称为个g1,g2--gn.赛道是一条无限长的直线.最初,gi位于距离起跑线前进ki的位置.比赛开始后,车辆gi将会以vi单位 ...

  2. BZOJ-3190 [JLOI2013]赛车

    转成二元一次不等式组,然后半平面交. #include <cstdlib> #include <cstdio> #include <cmath> #include ...

  3. 【BZOJ3190】[JLOI2013]赛车 单调栈+几何

    [BZOJ3190][JLOI2013]赛车 Description 这里有一辆赛车比赛正在进行,赛场上一共有N辆车,分别称为个g1,g2……gn.赛道是一条无限长的直线.最初,gi位于距离起跑线前进 ...

  4. 【BZOJ 3190】 3190: [JLOI2013]赛车 (半平面交)

    3190: [JLOI2013]赛车 Description 这里有一辆赛车比赛正在进行,赛场上一共有N辆车,分别称为个g1,g2--gn.赛道是一条无限长的直线.最初,gi位于距离起跑线前进ki的位 ...

  5. bzoj 3190 [JLOI2013]赛车 半平面交+细节处理

    题目大意 这里有一场赛车比赛正在进行,赛场上一共有N辆车,分别称为g1,g2--gn.赛道是一条无限长的直线.最初,gi位于距离起跑线前进ki的位置.比赛开始后,车辆gi将会以vi单位每秒的恒定速度行 ...

  6. P3256 [JLOI2013]赛车

    传送门 如果把速度看成斜率,起始位置看成截距,这就是一个水平可见直线了-- 不过这题里我实现方法借鉴了CQzhangyu大佬的,先按速度排序,然后维护一个单调栈,如果当前的人速度比栈顶大距离又比它远直 ...

  7. 【bzoj5089】最大连续子段和 分块+单调栈维护凸包

    题目描述 给出一个长度为 n 的序列,要求支持如下两种操作: A  l  r  x :将 [l,r] 区间内的所有数加上 x : Q  l  r : 询问 [l,r] 区间的最大连续子段和. 其中,一 ...

  8. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  9. 刷题总结——赛车(bzoj3190)

    题目: 题目背景 JLOI2013 T1 题目描述 这里有一辆赛车比赛正在进行,赛场上一共有 N 辆车,分别称为 g1,g2,……,gn.赛道是一条无限长的直线.最初,gi 位于距离起跑线前进 ki  ...

随机推荐

  1. ubuntu服务器建立apache虚拟主机

    启用与停用站点的方法 a2ensite 站点名 a2dissite 站点名 基于名字的(通过域名来区分)的虚拟主机 安装好apache以后默认有一个叫default的虚拟主机.新建虚拟主机时可以直接复 ...

  2. C++学习_继承覆盖重载

    今天通过对实验二继承,重载,覆盖的学习,让我更深一步理解了这些概念的区别. 首先来明确一个概念,函数名即地址,也就是说函数名就是个指针. 编译阶段,编译器为每个函数的代码分配一个地址空间并编译函数代码 ...

  3. PHP 中 include() 与 require() 的区别说明

    引用文件的方法有两种:require 及 include.两种方式提供不同的使用弹性. require 的使用方法如 require("MyRequireFile.php"); . ...

  4. CE工具里自带的学习工具--第四关

    图解:

  5. What is state and props

    State, in React component, is internal dataset which affects the rendering of the component. To some ...

  6. JVM优化(下)

    14.Tomcat8优化之G1牢记收集器的测试结果以及小结: jmeter测试:(1)tomcat未做任何优化:(2)禁用AJP:(3)启用连接池:(4)设置最大线程数1000,初始线程数200:(5 ...

  7. C# WebService 的缓存机制

    C# WebService 的缓存机制   [转]WebService的缓存机制 2008年02月19日 星期二 11:22 WebService的缓存分为两种,一种是简单的输出缓存,一种是强大的数据 ...

  8. 自动下载相对应的jar包

    一.去到需要的 maven下载地址 http://mvnrepository.com/artifact/org.apache.struts/struts2-core/2.5.13 二.然后去到 pom ...

  9. rownum导致sql不能进行谓词推入

    背景 案件(13405_RI-再保结算查询导出太慢),造成性能慢的原因是执行以下sql时,每次执行平均需要消耗2秒, 画面上,点击一次导出按钮,就会发起数以百记的调用. SQL执行代码段 select ...

  10. 【转载】分布式系列文章——Paxos算法原理与推导

    转载:http://linbingdong.com/2017/04/17/%E5%88%86%E5%B8%83%E5%BC%8F%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0 ...