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轴右面的半平面交。

注意两个赛车速度和起始状态都同样的情况。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cmath>
  5. #include<cstdlib>
  6. #include<algorithm>
  7. #include<vector>
  8. #define F(i,j,n) for(int i=j;i<=n;i++)
  9. #define D(i,j,n) for(int i=j;i>=n;i--)
  10. #define ll long long
  11. #define maxn 10005
  12. #define eps 1e-8
  13. using namespace std;
  14. int n,top,ans[maxn],f[maxn];
  15. struct car{int p,v,id;}a[maxn],s[maxn];
  16. vector<int> v[maxn];
  17. inline int read()
  18. {
  19. int x=0,f=1;char ch=getchar();
  20. while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
  21. while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
  22. return x*f;
  23. }
  24. inline bool cmp(car x,car y)
  25. {
  26. return (x.v==y.v)?x.p>y.p:x.v<y.v;
  27. }
  28. inline double cross(car x,car y)
  29. {
  30. return (double)(x.p-y.p)/(y.v-x.v);
  31. }
  32. int main()
  33. {
  34. n=read();
  35. F(i,1,n) a[i].p=read();
  36. F(i,1,n) a[i].v=read();
  37. F(i,1,n) a[i].id=i,f[i]=i;
  38. sort(a+1,a+n+1,cmp);
  39. s[++top]=a[1];
  40. F(i,2,n)
  41. {
  42. if (a[i].v==a[i-1].v)
  43. {
  44. if (a[i].p==a[i-1].p)
  45. {
  46. v[f[a[i-1].id]].push_back(a[i].id);
  47. f[a[i].id]=f[a[i-1].id];
  48. }
  49. continue;
  50. }
  51. while (top>=2&&cross(s[top],s[top-1])>cross(s[top-1],a[i])) top--;
  52. while (top>=1&&cross(s[top],a[i])<-eps) top--;
  53. s[++top]=a[i];
  54. }
  55. F(i,1,top) ans[i]=s[i].id;
  56. int tt=top;
  57. F(i,1,tt) for(int j=0;j<v[ans[i]].size();j++) ans[++top]=v[ans[i]][j];
  58. sort(ans+1,ans+top+1);
  59. printf("%d\n",top);
  60. F(i,1,top-1) printf("%d ",ans[i]);
  61. printf("%d\n",ans[top]);
  62. return 0;
  63. }

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. COGS.1200 ganggang的烦恼

    背景 Zhang Gangrui 年纪大了,记性不好,保险箱的密码记不住了,他只记得密码是一个数的阶乘各个位的数相加的和,最后还有个T或F,代表这个数是否为素数,正好,你到他家去了,他请你帮他这个忙, ...

  2. windows sdk编程禁止窗体最大化最小化

    #include <windows.h> /*消息处理函数声明*/ HRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM ...

  3. CAD交互绘制圆(com接口)

    CAD绘制图像的过程中,画圆的情况是非常常见的,用户可以在控件视区点取任意一点做为圆心,再动态点取半径绘制圆. 主要用到函数说明: _DMxDrawX::DrawCircle 绘制一个圆.详细说明如下 ...

  4. vue-router 基本使用(vue工程化)

    (1)概念: 路由,其实就是指向的意思,当我点击页面上的home按钮时,页面中就要显示home的内容,如果点击页面上的about 按钮,页面中就要显示about 的内容.Home按钮  => h ...

  5. 从Excel读取数据,然后分析相似的数据,多线程处理(多线程比较相似的字符串,统计出相似的数量及字符串)

    之前的jar包有问题,现已修改. 需要的jar包,已修改 自己去Maven中央仓库下载jar包. excel数据: 直接上代码. 程序再度优化了一遍.之后如果想再度精准,可能需要建模,最近没空继续做了 ...

  6. jQuery动态移除和绑定事件

    function bindEvent() { //移除绑定事件 $('.btnsp').unbind('click'); //绑定事件 $('.btnsp').bind('click', functi ...

  7. 递归删除N天前的文件夹及子文件夹下的特定文件

    @echo offrem 设置被删除文件夹路径set SrcDir=D:\tmp\test\rem 设置文件保存天数set Days=2rem /p指定搜索文件的路径 /s 在子目录中搜索 /m 指定 ...

  8. wampserver更改语言步骤

    wampserver更改语言步骤的具体步骤: 右击屏幕右下角图标>选择language>选择更改的语言

  9. [Python3网络爬虫开发实战] 1.4.2-MongoDB安装

    MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档.数组及文档数组,非常灵活. MongoDB支持多 ...

  10. 读书笔记:《人有人的用处》------N.维纳. (2016.12.28)

    读书笔记:<人有人的用处>------N.维纳 ·某些系统可以依其总能量而和其他系统区别开来. ·在某些情况下,一个系统如果保持足够长时间的运转,那它就会遍历一切与其能量相容的位置和动量的 ...