B. The Meeting Place Cannot Be Changed
time limit per test

5 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

The main road in Bytecity is a straight line from south to north. Conveniently, there are coordinates measured in meters from the southernmost building in north direction.

At some points on the road there are n friends, and i-th of them is standing at the point xi meters and can move with any speed no greater than vi meters per second in any of the two directions along the road: south or north.

You are to compute the minimum time needed to gather all the n friends at some point on the road. Note that the point they meet at doesn't need to have integer coordinate.

Input

The first line contains single integer n (2 ≤ n ≤ 60 000) — the number of friends.

The second line contains n integers x1, x2, ..., xn (1 ≤ xi ≤ 109) — the current coordinates of the friends, in meters.

The third line contains n integers v1, v2, ..., vn (1 ≤ vi ≤ 109) — the maximum speeds of the friends, in meters per second.

Output

Print the minimum time (in seconds) needed for all the n friends to meet at some point on the road.

Your answer will be considered correct, if its absolute or relative error isn't greater than 10 - 6. Formally, let your answer be a, while jury's answer be b. Your answer will be considered correct if  holds.

Examples
input
3
7 1 3
1 2 1
output
2.000000000000
input
4
5 10 3 2
2 3 2 4
output
1.400000000000
Note

In the first sample, all friends can gather at the point 5 within 2 seconds. In order to achieve this, the first friend should go south all the time at his maximum speed, while the second and the third friends should go north at their maximum speeds.

思路:二分;

二分时间,然后每次检查时求出每个点所能到达的左右的距离,然后求线段的最大重叠。复杂度(n*log^2(n))

或者二分每次检查时求出每个点所能到达的左右的距离,然后维护最小的右端r,和最大的左端l,如果r > l成立复杂度n*log(n);

 1 #pragma comment(linker, "/STACK:102400000,102400000")
2 #include<stdio.h>
3 #include<algorithm>
4 #include<iostream>
5 #include<string.h>
6 #include<stdlib.h>
7 #include<queue>
8 #include<map>
9 #include<math.h>
10 #include<vector>
11 const int N = 1e6+6;
12 using namespace std;
13 typedef long long LL;
14 double x[70000];
15 double v[70000];
16 typedef struct node
17 {
18 double val;
19 int k;
20 } ss;
21 bool cmp(node p,node q)
22 {
23 if(p.val == q.val)
24 return p.k > q.k;
25 else return p.val < q.val;
26 }
27 ss ask[70000*2];
28 bool check(double c,int n);
29 int main(void)
30 {
31 int n;
32 scanf("%d",&n);
33 for(int i = 1; i <= n; i++)
34 scanf("%lf",&x[i]);
35 for(int i = 1; i <= n; i++)
36 scanf("%lf",&v[i]);
37 int t = 100;
38 double ll = 0,rr = 1e10;
39 double acc = -1;
40 while(t)
41 {
42 double mid = (ll+rr)/2;
43 if(check(mid,n))
44 {
45 acc = mid;
46 rr = mid;
47 //printf("%lf\n",mid);
48 }
49 else ll = mid;
50 t--;
51 }
52 printf("%.10f\n",acc);
53 return 0;
54 }
55 bool check(double c,int n)
56 {
57 int cn = 0;
58 for(int i = 1; i <= n; i++)
59 {
60 ask[cn].val = max((double)0,x[i] - c*v[i]);
61 ask[cn].k = 1;
62 cn++;
63 ask[cn].val = x[i] + c*v[i];
64 ask[cn].k = -1;
65 cn++;
66 }
67 int sum = 0;
68 sort(ask,ask+cn,cmp);
69 for(int i = 0; i < cn; i++)
70 {
71 sum += ask[i].k;
72 if(sum == n)
73 return true;
74 }
75 return false;
76 }
 1 #pragma comment(linker, "/STACK:102400000,102400000")
2 #include<stdio.h>
3 #include<algorithm>
4 #include<iostream>
5 #include<string.h>
6 #include<stdlib.h>
7 #include<queue>
8 #include<map>
9 #include<math.h>
10 #include<vector>
11 const int N = 1e6+6;
12 using namespace std;
13 typedef long long LL;
14 double x[70000];
15 double v[70000];
16 typedef struct node
17 {
18 double val;
19 int k;
20 } ss;
21 bool cmp(node p,node q)
22 {
23 if(p.val == q.val)
24 return p.k > q.k;
25 else return p.val < q.val;
26 }
27 ss ask[70000*2];
28 bool check(double c,int n);
29 int main(void)
30 {
31 int n;
32 scanf("%d",&n);
33 for(int i = 1; i <= n; i++)
34 scanf("%lf",&x[i]);
35 for(int i = 1; i <= n; i++)
36 scanf("%lf",&v[i]);
37 int t = 100;
38 double ll = 0,rr = 1e10;
39 double acc = -1;
40 while(t)
41 {
42 double mid = (ll+rr)/2;
43 if(check(mid,n))
44 {
45 acc = mid;
46 rr = mid;
47 //printf("%lf\n",mid);
48 }
49 else ll = mid;
50 t--;
51 }
52 printf("%.10f\n",acc);
53 return 0;
54 }
55 bool check(double c,int n)
56 {
57 int cn = 0;
58 double maxx = 1e10;
59 double minn = 0;
60 for(int i = 1; i <= n; i++)
61 {
62 minn = max(minn,x[i] - c*v[i]);
63 maxx = min(maxx,x[i] + c*v[i]);
64 }
65 if(maxx >= minn)return true;
66 return false;
67 }

n*log(n)

B. The Meeting Place Cannot Be Changed的更多相关文章

  1. codeforces 782B The Meeting Place Cannot Be Changed (三分)

    The Meeting Place Cannot Be Changed Problem Description The main road in Bytecity is a straight line ...

  2. code force 403B.B. The Meeting Place Cannot Be Changed

    B. The Meeting Place Cannot Be Changed time limit per test 5 seconds memory limit per test 256 megab ...

  3. Cf Round #403 B. The Meeting Place Cannot Be Changed(二分答案)

    The Meeting Place Cannot Be Changed 我发现我最近越来越zz了,md 连调程序都不会了,首先要有想法,之后输出如果和期望的不一样就从输入开始一步一步地调啊,tmd现在 ...

  4. Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals) B. The Meeting Place Cannot Be Changed

    地址:http://codeforces.com/contest/782/problem/B 题目: B. The Meeting Place Cannot Be Changed time limit ...

  5. AC日记——The Meeting Place Cannot Be Changed codeforces 780b

    780B - The Meeting Place Cannot Be Changed 思路: 二分答案: 代码: #include <cstdio> #include <cstrin ...

  6. Codeforces 782B The Meeting Place Cannot Be Changed(二分答案)

    题目链接 The Meeting Place Cannot Be Changed 二分答案即可. check的时候先算出每个点可到达的范围的区间,然后求并集.判断一下是否满足l <= r就好了. ...

  7. codeforces 782B The Meeting Place Cannot Be Changed+hdu 4355+hdu 2438 (三分)

                                                                   B. The Meeting Place Cannot Be Change ...

  8. CodeForce-782B The Meeting Place Cannot Be Changed(高精度二分)

    https://vjudge.net/problem/CodeForces-782B B. The Meeting Place Cannot Be Changed time limit per tes ...

  9. codeforces 782B - The Meeting Place Cannot Be Changed

    time limit per test 5 seconds memory limit per test 256 megabytes input standard input output standa ...

随机推荐

  1. Oracle基础入门

    说明:钓鱼君昨天在网上找到一份oracle项目实战的文档,粗略看了一下大致内容,感觉自己很多知识不够扎实,便跟着文档敲了一遍,目前除了机械性代码没有实现外,主要涉及知识:创建表空间.创建用户.给用户赋 ...

  2. 【Redis】Sentinel 哨兵模式

    Sentinel(哨兵模式) 目录 Sentinel(哨兵模式) 哨兵模式的三个定时任务 Sentinel(哨兵)与Sentinel .主服务器.从服务器之间的连接 检测下线状态 选择领头 Senti ...

  3. 学习java的第十天

    一.今日收获 1.java完全学习手册第二章2.9程序流程控制中的选择结构与顺序结构的例题 2.观看哔哩哔哩上的教学视频 二.今日问题 1.例题的问题不大,需要注意大小写,新的语句记忆不牢 2.哔哩哔 ...

  4. day13 iptables防火墙

    day13 iptables防火墙 一.防火墙的概述 1.什么是防火墙 防止恶意流量访问的软件就叫做防火墙. 2.防火墙的种类 软件防火墙:firewalld.iptables 硬件防火墙:F5 fi ...

  5. 零基础学习java------26--------获取省访问量的top3,APP版本数据分析,事务,json,json字符串与对象间的相互转换,求电影平均分

    一. day23中的ip,url案例(前面答案错了) 思路分析: 1.创建javabean,用来存储ip.txt各字段的信息 2. 创建java工具类,封装相应的方法 (1) 加载读取ip.txt文档 ...

  6. Mybatis通用Mapper介绍与使用

    前言 使用Mybatis的开发者,大多数都会遇到一个问题,就是要写大量的SQL在xml文件中,除了特殊的业务逻辑SQL之外,还有大量结构类似的增删改查SQL.而且,当数据库表结构改动时,对应的所有SQ ...

  7. 【C/C++】C++ warning: control reaches end of non-void function return

    控制到达非void函数的结尾. 一些本应带有返回值的函内数到容达结尾后可能并没有返回任何值. 这时候,最好检查一下是否每个控制流都会有返回值. 我是ostream声明的时候没有写return out; ...

  8. 【C/C++】习题3-2 分子量/算法竞赛入门经典/字符串

    给出一种物质的分子式,求分子量.只包含4种原子,分别为C,H,O,N. [知识点] 1.ASCII码 [阿拉伯数字]48~57 [大写字母]65~90 [小写字母]97~122 2.输入循环到n-1的 ...

  9. C#文件操作(IO流 摘抄)

    11 文件操作概述 11.1 驱动器 在Windows操作系统中,存储介质统称为驱动器,硬盘由于可以划分为多个区域,每一个区域称为一个驱动器..NET Framework提供DriveInfo类和 D ...

  10. CPU中的上下文

    目录 一.简介 二.进程切换 三.线程切换 四.中断切换 五.中断检测和查看 六.模拟 一.简介 Linux是多任务操作系统,cpu划分固定时间片,分给每个进程,当前进程时间片执行完毕,将挂起,运行下 ...