Codeforces Round #425 (Div. 2)C
题目连接:http://codeforces.com/contest/832/problem/C
3 seconds
256 megabytes
standard input
standard output
n people are standing on a coordinate axis in points with positive integer coordinates strictly less than 106. For each person we know in which direction (left or right) he is facing, and his maximum speed.
You can put a bomb in some point with non-negative integer coordinate, and blow it up. At this moment all people will start running with their maximum speed in the direction they are facing. Also, two strange rays will start propagating from the bomb with speed s: one to the right, and one to the left. Of course, the speed s is strictly greater than people's maximum speed.
The rays are strange because if at any moment the position and the direction of movement of some ray and some person coincide, then the speed of the person immediately increases by the speed of the ray.
You need to place the bomb is such a point that the minimum time moment in which there is a person that has run through point 0, and there is a person that has run through point 106, is as small as possible. In other words, find the minimum time moment t such that there is a point you can place the bomb to so that at time moment t some person has run through 0, and some person has run through point106.
The first line contains two integers n and s (2 ≤ n ≤ 105, 2 ≤ s ≤ 106) — the number of people and the rays' speed.
The next n lines contain the description of people. The i-th of these lines contains three integers xi, vi and ti (0 < xi < 106, 1 ≤ vi < s,1 ≤ ti ≤ 2) — the coordinate of the i-th person on the line, his maximum speed and the direction he will run to (1 is to the left, i.e. in the direction of coordinate decrease, 2 is to the right, i.e. in the direction of coordinate increase), respectively.
It is guaranteed that the points 0 and 106 will be reached independently of the bomb's position.
Print the minimum time needed for both points 0 and 106 to be reached.
Your answer is considered correct if its absolute or relative error doesn't exceed 10 - 6. Namely, if your answer is a, and the jury's answer is b, then your answer is accepted, if
.
2 999
400000 1 2
500000 1 1
500000.000000000000000000000000000000
2 1000
400000 500 1
600000 500 2
400.000000000000000000000000000000
In the first example, it is optimal to place the bomb at a point with a coordinate of 400000. Then at time 0, the speed of the first person becomes 1000 and he reaches the point 106 at the time 600. The bomb will not affect on the second person, and he will reach the 0point at the time 500000.
In the second example, it is optimal to place the bomb at the point 500000. The rays will catch up with both people at the time 200. At this time moment, the first is at the point with a coordinate of 300000, and the second is at the point with a coordinate of 700000. Their speed will become 1500 and at the time 400 they will simultaneously run through points 0 and 106.
题意:改出N个人的初始始方向和速度,然后让你放一颗炸弹在某个整数位置,炸弹会在最开始爆炸,并且造成往左往右的两个光束,当光束追上人(有相同的方向)的时候人会加上光的速度,问你把炸弹放在某一个位置使得在往左往右都跑出至少一人的时间?
题解:二分时间,每次判断能否在规定时间能否左右都跑出至少一人,
#include<bits/stdc++.h>
#include<algorithm>
using namespace std ;
typedef long long ll;
const int maxn=1e5+;
int s,n;
struct node
{
int p,v,f;
}a[maxn];
bool judge(double lim)
{
bool left=false,right=false;
double left_l=1e6,left_r=,right_l=1e6,right_r=;
for(int i=;i<n;i++)
{
if(a[i].f==)
{
if(a[i].p-(s+a[i].v)*lim>)continue;
left=true;
if(a[i].p-a[i].v*lim<=0.0)
{
left_l=;left_r=1e6;
continue;
}
double rr=floor((s-a[i].v)*(((a[i].v+s)*lim-a[i].p)/(double)s)+a[i].p);//解三元一次方程就可以得到最大位置
left_r=max(left_r,rr);
left_l=min(left_l,(double)a[i].p);
}
else
{
if(a[i].p+(s+a[i].v)*lim<1e6)continue;
right=true;
if(a[i].p+a[i].v*lim>=1e6)
{
right_l=,right_r=1e6;
continue;
}
double LL=ceil(a[i].p+(a[i].v-s)*(1e6-a[i].p-(a[i].v+s)*lim)/(-s));//同上
right_l=min(right_l,LL);
right_r=max(right_r,(double)a[i].p);
}
}
if(!left||!right)return false;
if((left_l>left_r)||(right_l>right_r))
return false;
if(right_r<left_l||right_l>left_r)return false;
else return true;
}
int main()
{
scanf("%d %d",&n,&s);
for(int i=;i<n;i++)
{
scanf("%d %d %d",&a[i].p,&a[i].v,&a[i].f);
}
double l=0.0,r=1e6,mid;
for(int i=;i<=;i++)
{
mid=(l+r)/;
if(judge(mid))
{
r=mid;
}
else
{
l=mid;
}
}
printf("%.12f\n",r);
}
Codeforces Round #425 (Div. 2)C的更多相关文章
- Codeforces Round #425 (Div. 2)
A 题意:给你n根棍子,两个人每次拿m根你,你先拿,如果该谁拿的时候棍子数<m,这人就输,对手就赢,问你第一个拿的人能赢吗 代码: #include<stdio.h>#define ...
- Codeforces Round #425 (Div. 2) Problem D Misha, Grisha and Underground (Codeforces 832D) - 树链剖分 - 树状数组
Misha and Grisha are funny boys, so they like to use new underground. The underground has n stations ...
- Codeforces Round #425 (Div. 2) Problem C Strange Radiation (Codeforces 832C) - 二分答案 - 数论
n people are standing on a coordinate axis in points with positive integer coordinates strictly less ...
- Codeforces Round #425 (Div. 2) Problem B Petya and Exam (Codeforces 832B) - 暴力
It's hard times now. Today Petya needs to score 100 points on Informatics exam. The tasks seem easy ...
- Codeforces Round #425 (Div. 2) Problem A Sasha and Sticks (Codeforces 832A)
It's one more school day now. Sasha doesn't like classes and is always bored at them. So, each day h ...
- Codeforces Round #425 (Div. 2) B. Petya and Exam(字符串模拟 水)
题目链接:http://codeforces.com/contest/832/problem/B B. Petya and Exam time limit per test 2 seconds mem ...
- Codeforces Round #425 (Div. 2))——A题&&B题&&D题
A. Sasha and Sticks 题目链接:http://codeforces.com/contest/832/problem/A 题目意思:n个棍,双方每次取k个,取得多次数的人获胜,Sash ...
- Codeforces Round #425 (Div. 2) B - Petya and Exam
地址:http://codeforces.com/contest/832/problem/B 题目: B. Petya and Exam time limit per test 2 seconds m ...
- Codeforces Round #425 (Div. 2) C - Strange Radiation
地址:http://codeforces.com/contest/832/problem/C 题目: C. Strange Radiation time limit per test 3 second ...
随机推荐
- oracle语句批处理
数据量有40万条,从一个对象table_01一条一条取数到对象table_02,如果用原始的 Statement Statmt =comm.createStatement(); String sql= ...
- C++三种野指针及应对/内存泄露
野指针,也就是指向不可用内存区域的指针.如果对野指针进行操作,将会使程序发生不可预知的错误,甚至可能直接引起崩溃. 野指针不是NULL指针,是指向"垃圾"内存的指 ...
- 银河麒麟操作系统U盘手动挂载,出现乱码
使用银河麒麟操作系统,U盘手动挂载,U盘中中文字符显示为乱码?? 对于银河麒麟操作系统的这一问题,可能是因为字符集的原因,需要在mount后加参数: sudo mount –o iochar ...
- 高阶自定义View --- 粒子变幻、隧道散列、组合文字
高阶自定义View --- 粒子变幻.隧道散列.组合文字 作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:h ...
- TP5.0实现无限极回复功能
最近做项目的时候用到了评论回复,使用ThinkPHP5.0框架做回复碰到了一些问题,简单总结一下.(李昌辉) 1.首先是数据表的设计: create table zy_huifu ( code int ...
- 浅谈如何用Java操作MongoDB
NoSQL数据库因其可扩展性使其变得越来越流行,利用NoSQL数据库可以给你带来更多的好处,MongoDB是一个用C++编写的可度可扩展性的开源NoSQL数据库.本文主要讲述如何使用Java操作Mon ...
- hdu 2066 最短路水题
题意:给出多个可选择的起始点和终点,求最短路 思路:执行起始点次的spfa即可 代码: #include<iostream> #include<cstdio> #include ...
- SQL Server 2008 开启数据库的远程连接
转载: 陈萌_1016----有道云笔记 SQL Server 2008默认是不允许远程连接的,如果想要在本地用SSMS连接远程服务器上的SQL Server 2008,远程连接数据库.需要做两个部 ...
- Jenkins关于tomcat地址和端口映射的配置
<?xml version='1.0' encoding='utf-8'?><!-- Licensed to the Apache Software Foundation (ASF) ...
- .net core的在初始化数据的拦截处理
本人初接触 .net core 如有不对的地方,请大家随时指正,共同学习. 首先说明,此案例是基于.net core1.0版本的,对于2.0好多的功能已经升级,例如:一些常用的dll已经在框架中存在, ...