刷题总结——赛车(bzoj3190)
题目:
题目背景
JLOI2013 T1
题目描述
这里有一辆赛车比赛正在进行,赛场上一共有 N 辆车,分别称为 g1,g2,……,gn。赛道是一条无限长的直线。最初,gi 位于距离起跑线前进 ki 的位置。比赛开始后,车辆 gi 将会以 vi 单位每秒的恒定速度行驶。在这个比赛过程中,如果一辆赛车曾经处于领跑位置的话(即没有其他的赛车跑在他的前面),这辆赛车最后就可以得奖,而且比赛过程中不用担心相撞的问题。现在给出所有赛车的起始位置和速度,你的任务就是算出那些赛车将会得奖。
输入格式
第一行有一个正整数 N 表示赛车的个数。
接下来一行给出 N 个整数,按顺序给出 N 辆赛车的起始位置。
再接下来一行给出 N 个整数,按顺序给出 N 辆赛车的恒定速度。
输出格式
输出包括两行,第一行为获奖的赛车个数。
第二行按从小到大的顺序输出获奖赛车的编号,编号之间用空格隔开,注意最后一个编号后面不要加空格。
样例数据 1
备注
【数据范围】
对于 20% 的数据:N<=10
对于 50% 的数据:N<=6000
对于 100% 的数据:N<=10000, 0<=ki<=109, 0<=vi<=109
题解:
半平面交模版的,注意在两端点不确定的情况下充分利用斜率和交点,另外
心得:
模版题模版题啦啦啦
代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<cctype>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const double minn=1e-;
const int N=;
int read()
{
int f=,x=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
struct line
{
int pos;
int v;
int id;
}car[N],q[N],a[N];
int cnt,ans[N];
double interx(line a,line b)
{
return (double)(b.pos-a.pos)/(a.v-b.v);
}
bool comp(line a,line b)
{
if(a.v!=b.v) return a.v<b.v;
else return a.pos<b.pos;
}
bool jud(line a,line b,line c)
{
return interx(a,b)>interx(a,c);
}
int main()
{
// freopen("a.in","r",stdin);
cnt=read();
for(int i=;i<=cnt;i++)
{
car[i].pos=read();
car[i].id=i;
}
for(int i=;i<=cnt;i++)
car[i].v=read();
sort(car+,car+cnt+,comp);
int tot=;
for(int i=;i<=cnt;i++)
{
if(car[i].v!=car[i-].v||(car[i].v==car[i-].v&&car[i].pos==car[i-].pos))
tot++;
car[tot]=car[i];
}
cnt=tot,tot=;
a[++tot]=car[];
ans[]=car[].id;
for(int i=;i<=cnt;i++)
{
while(tot>=&&interx(a[tot],car[i])<-minn) tot--;
while(tot>=&&jud(a[tot-],a[tot],car[i])) tot--;
a[++tot]=car[i];
ans[tot]=car[i].id;
}
sort(ans+,ans+tot+);
cout<<tot<<endl;
for(int i=;i<=tot;i++)
{
printf("%d",ans[i]);
if(i!=tot)printf(" ");
}
return ;
}
刷题总结——赛车(bzoj3190)的更多相关文章
- C#LeetCode刷题-堆
堆篇 # 题名 刷题 通过率 难度 23 合并K个排序链表 39.4% 困难 215 数组中的第K个最大元素 51.5% 中等 218 天际线问题 32.9% 困难 239 滑动窗口最大值 ...
- C#LeetCode刷题-动态规划
动态规划篇 # 题名 刷题 通过率 难度 5 最长回文子串 22.4% 中等 10 正则表达式匹配 18.8% 困难 32 最长有效括号 23.3% 困难 44 通配符匹配 17.7% ...
- LeetCode刷题系列
LeetCode 我们工作面试和提高自身数据结构和算法能力的时候往往需要刷刷题,我选择LeetCode是通过一个留学论坛了解的.专业,覆盖语种全面. 提前说说刷题的心得: 尽量手写代码,少使用IDE的 ...
- ife任务刷题总结(一)-css reset与清除浮动
本文同时发布于本人的个人网站www.yaoxiaowen.com 百度创办的前端技术学院,是一个面向大学生的前端技术学习平台.虽然只有大学生才有资格报名,提交代码进行比赛排名.但是这并不妨碍我们这些初 ...
- 刷题ING...
我用codeVS刷题.. 努力准备!!
- XidianOJ 1020 ACMer去刷题吧
题目描述 刷题是每个ACMer必由之路,已知某oj上有n个题目,第i个题目小X能做对的概率为Pi(0<=Pi<=1,1<=i<=n) 求小X至少做对k道题的概率 输入 第一行输 ...
- 【BZOJ-4590】自动刷题机 二分 + 判定
4590: [Shoi2015]自动刷题机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 156 Solved: 63[Submit][Status ...
- NOI题库分治算法刷题记录
今天晚自习机房刷题,有一道题最终WA掉两组,极其不爽,晚上回家补完作业欣然搞定它,特意来写篇博文来记录下 (最想吐槽的是这个叫做分治的分类,里面的题目真的需要分治吗...) 先来说下分治法 分治法的设 ...
- NOI题库刷题日志 (贪心篇题解)
这段时间在NOI题库上刷了刷题,来写点心得和题解 一.寻找平面上的极大点 2704:寻找平面上的极大点 总时间限制: 1000ms 内存限制: 65536kB 描述 在一个平面上,如果有两个点( ...
随机推荐
- 你不知道的HTTP之首部字段一览
一.HTTP/1.1 首部字段一览 HTTP 首部字段根据实际用途被分为以下 4 种类型: 1.通用首部字段:请求报文和响应报文两方都会使用的首部. 首部字段名 说明 Cache-Control 控制 ...
- EJB配置jboss数据源
1.数据源的模板在\jboss-4.2.3.GA-jdk6\jboss-4.2.3.GA\docs\examples\jca\下2.编辑数据源文件,比如mysql-ds.xml,命名规则是名称-ds. ...
- COGS 1710. [POJ2406]字符串的幂
★☆ 输入文件:powerstrings.in 输出文件:powerstrings.out 简单对比时间限制:3 s 内存限制:256 MB [题目描述] 对于给定的两个字符串a,b, ...
- FIBON高精度
#include<stdio.h> #include<string.h> int u,n; ],b[],h[]; ],y[],z[]; int main() { char s( ...
- 1653: Champion of the Swordsmanship
1653: Champion of the Swordsmanship Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 11 Solved: 8[Subm ...
- js 监听页面url锚点变化 window.onpopstate
window.onpopstate = function (event) { if (location.href.indexOf('#') == -1) { location.reload(); } ...
- 爬虫_python3_requests_2
pip install requests 进行简单的操作 发送一个get请求 # 发送请求 import requests response = requests.get('http://httpbi ...
- CPP-基础:strcpy之于C++(
以下对strcpy函数错误的是? char atr1[]="string"; ]; char *str3; char *str4="sting"; A.strc ...
- linux配置nodeJs环境教程
来自阿里云:https://help.aliyun.com/document_detail/50775.html
- luogu P1966 火柴排队 (逆序对)
luogu P1966 火柴排队 题目链接:https://www.luogu.org/problemnew/show/P1966 显然贪心的想,排名一样的数相减是最优的. 证明也很简单. 此处就不证 ...