题目大意:

每辆赛车有自己的出发位置和速度,问有多少赛车在某个时刻处于第一的位置。

题解:

每辆赛车任意时刻的位置可以用一条直线来表示,按斜率排序依次加入,单调栈。

最后在栈中的就是最后的答案。

和BZOJ1007相似。

代码:

#include<cstdio>
#include<algorithm>
using namespace std;
int d[1000005];
struct node{int b,k,id;
}a[1000005],q[1000005];
bool cmp(node a,node b){return a.k<b.k || a.k==b.k && a.b<b.b;
}
bool cmp1(node a,node b){return a.id<b.id;
}
int main(){int n;scanf("%d",&n);for (int i=1; i<=n; i++)scanf("%d",&a[i].b);for (int i=1; i<=n; i++){scanf("%d",&a[i].k);a[i].id=i;}sort(a+1,a+n+1,cmp);int t=1;for (int i=2; i<=n; i++){if (a[i].k!=a[i-1].k || (a[i].k==a[i-1].k && a[i].b==a[i-1].b)) t++;a[t]=a[i];}n=t;q[1]=a[1];int top=1;d[1]=1;for (int i=2; i<=n; i++){while (top>=1 && a[i].b>q[top].b) top--;while (top>=2 && ((double)q[d[top]].b-q[top].b)/(q[top].k-q[d[top]].k)>((double)q[d[top]].b-a[i].b)/(a[i].k-q[d[top]].k)) top--;q[++top]=a[i];if (q[top].k==q[top-1].k) d[top]=d[top-1];else d[top]=top-1;}sort(q+1,q+top+1,cmp1);printf("%d\n",top);for (int i=1; i<top; i++)printf("%d ",q[i].id);printf("%d",q[top].id);return 0;
}

  

转载于:https://www.cnblogs.com/silenty/p/8848936.html

BZOJ 3190: [JLOI2013]赛车相关推荐

  1. bzoj 3190 赛车 半平面交

    直接写的裸的半平面交,已经有点背不过模板了... 这题卡精度,要用long double ,esp设1e-20... #include<iostream> #include<cstd ...

  2. bzoj3190: [JLOI2013]赛车

    题目 http://www.lydsy.com/JudgeOnline/problem.php?id=3190 题解 上午一节课写出来,在CodeVS上交了,90分 然而一直到刚才,我都在调试.... ...

  3. [BZOJ] 3191 [JLOI2013]卡牌游戏

    Time Limit: 10 Sec Memory Limit: 128 MB Submit: 725 Solved: 487 [Submit][Status][Discuss] Descriptio ...

  4. bzoj3190 [JLOI2013]赛车 半平面交

    思路和求凸包有点像 首先根据初始位置排序,然后同位置按斜率升序 然后加一条直线就暴力找就可以了(可以二分) 存每条直线的选取区间,然后由于有效的斜率单增,所以若覆盖了就是最后一个 要注意多条直线交于区 ...

  5. 2019.4.summary

    2019.4.1 BZOJ1061: [Noi2008]志愿者招募 真心有点难QAQ https://www.byvoid.com/zhs/blog/noi-2008-employee 看void爷的 ...

  6. 退役前的做题记录1.0

    退役前的做题记录1.0 租酥雨最近很懒qwq,具体表现在写题的时候不想发题解了. 但是想想这样也不太好,就决定发个一句话(半句话到几句话不等)题解上来. 2018-09.18-2018-09.28 [ ...

  7. 【JLOI2013合集】BZOJ3090 赛车 BZOJ3091 卡牌游戏 BZOJ3092 删除物品 BZOJ3093 地形生成...

    赛车: 这个题就是水平可见直线.. 水平可见直线怎么做呢.. 就是把所有直线按斜率排序.然后从前往后处理边. 当中维护一个栈.如果当前线和栈顶的交点在栈顶和栈顶-1的交点左边.那么弹掉栈顶.. (可以 ...

  8. 【BZOJ 3191】[JLOI2013]卡牌游戏

    注意 最后一个没有空格!!!!! 题解(摘自网络) 有一个很重要的性质:当前人获胜的概率只与其在排列中与庄家的相对位置和人数有关..跟具体有哪些人无关.. 那么我们可以用f[i][j]表示还有i人时从 ...

  9. BZOJ刷题记录---提高组难度

    BZOJ刷题记录---提高组难度 总目录详见https://blog.csdn.net/mrcrack/article/details/90228694 序号 题号 算法 思想难度 实现难度 总难度 ...

  10. BZOJ.1558.[JSOI2009]等差数列(线段树 差分)

    BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...

最新文章

  1. SharePoint技术峰会2009视频(6)
  2. SAP生产订单管理与分析实例
  3. unity官方教程-TANKS(一)
  4. AmazeUI基本样式
  5. [PAT乙级]1032 挖掘机技术哪家强
  6. Java8的产品周期_java8的时间和`Date`的对比
  7. 香港政府活用无人机,正式应用到调研检测领域
  8. Leetcode每日一题:1365.how-many-numbers-are-smaller-than-the-current-number(有多少小于当前数字的数字)
  9. HDFS最基本的操作命令 和基本配置
  10. python函数定义及调用-python函数的定义和调用 | 酷python
  11. [MFC] 向文本编辑框写入数据与从其中读取数据
  12. 从入坑到入门 | 龙蜥开发者说第2期
  13. Photoshop CS4 卡通角色的设计与绘制(2)
  14. 如何将Mac升级到High Sierra
  15. python下载CVF论文
  16. C++ Tetris俄罗斯方块
  17. 详解ZStack Cloud v4.0:自研VPC网络模型实践指南
  18. 使用Git管理多媒体文件
  19. Bert 得到中文词向量
  20. let、const、var的区别

热门文章

  1. isp mpls专线
  2. nginx的配置总结
  3. CentOS修改时区
  4. Linux下高效实用的grep命令
  5. Shell脚本-tr 将大写字母变为小写
  6. 深入解读Linux进程调度系列(6)——抢占与非抢占
  7. SQlite数据库的C编程接口(五) 便捷函数(Convenience Functions) ——《Using SQlite》读书笔记
  8. oracle字符串转日期比较大小写,【varchar】oracle中比较日期大小日期定义的是varchar2类型的......
  9. java中的值传递与引用传递
  10. window.location.href不打开新窗口_在使用网站时,什么情况该用新窗口打开?