题目传送:https://www.nowcoder.com/acm/contest/140/C

题意:有n个云层,每个云层可以表示为y=ax+b。每个飞机的航线可以表示为时间x时,坐标为(x,cx+d)。问飞机旅程与最后一个云层相交的x坐标。不存在

分析:

可以确定两直线联立后解得交点x=(b-d)/(a-c)。

可以看做是点(a,b)和(c,d)的斜率的负数。

要求的最大的x,那么就变成了求得最小的斜率,答案最后再乘-1即可。

就是求每个(c,d)点到(a,b)的斜率,可以把每一个(a,b)看成一个点,求凸包。

每碰到一个(c,d)二(san)分到凸包上的点的斜率。维护最小值。

 #include<bits/stdc++.h>
using namespace std;
const double eps=1e-;
const double inf=1e20;
const int maxn=1e5+;
int sgn(double x){
if (fabs(x)<eps) return ;
if (x<) return -;
return ;
}
struct point{
double x,y;
int id; double ans;
point(){}
point(double _x,double _y):x(_x),y(_y){}
point operator +(const point &b)const{
return point(x+b.x,y+b.y);
}
point operator -(const point &b)const{
return point(x-b.x,y-b.y);
}
double operator ^(const point &b)const{
return x*b.y-y*b.x;
}
bool operator <(const point &b)const{
if (sgn(x-b.x)==) return y<b.y;
return x<b.x;
}
}; point p[maxn],pp[maxn];
int n,m;
double calc(point a,point b){
if (sgn(a.x-b.x)==) return 1.0;
return (a.y-b.y)/(a.x-b.x);
}
double cross(point p,point a,point b){
return (a-p)^(b-p);
}
void convex_hull(point p[],int N,point q[]){
sort(p,p+N);
int m=;
for (int i=;i<N;i++){
if (p[i].id>n){
if (m==) continue;
int l=,r=m-,mid;
while (l<r){
mid=(l+r)>>;
if (calc(p[i],q[mid])<calc(p[i],q[mid+])){
l=mid;
}
else r=mid-;
}
p[i].ans=min(p[i].ans,calc(p[i],q[l]));
}
else{
while (m> && cross(q[m-],q[m-],p[i])<=) m--;
q[m++]=p[i];
}
}
int k=m;
for (int i=N-;i>=;i--){
if (p[i].id>n){
if (m==k) continue;
int l=,r=m-,mid;
while (l<r){
mid=(l+r)>>;
if (calc(p[i],q[mid])<calc(p[i],q[mid+])){
l=mid;
}
else r=mid-;
}
p[i].ans=min(p[i].ans,calc(p[i],q[l]));
}
else{
while (m>k && cross(q[m-],q[m-],p[i])<=) m--;
q[m++]=p[i];
}
}
}
bool cmp(point a,point b){
return a.id<b.id;
}
int main(){
cin >> n;
for (int i=;i<n;i++){
cin >> p[i].x >> p[i].y;
p[i].id=i+; p[i].ans=inf;
}
cin >> m;
for (int i=n;i<n+m;i++){
cin >> p[i].x >> p[i].y;
p[i].id=i+; p[i].ans=inf;
}
convex_hull(p,n+m,pp);
for (int i=;i<n+m;i++){p[i].x*=-; p[i].y*=-;}
convex_hull(p,n+m,pp);
sort(p,p+n+m,cmp);
for (int i=n;i<n+m;i++)
if (p[i].ans>=) cout << "No cross\n";
else printf("%.7f\n",-p[i].ans);
return ;
}

牛客第二场 C.message(计算几何+二分)的更多相关文章

  1. 牛客第二场Dmoney

    链接:https://www.nowcoder.com/acm/contest/140/D 来源:牛客网 题目描述 White Cloud has built n stores numbered to ...

  2. 牛客第二场A-run

    链接:https://www.nowcoder.com/acm/contest/140/A 来源:牛客网 White Cloud is exercising in the playground. Wh ...

  3. 牛客第二场 J farm

    White Rabbit has a rectangular farmland of n*m. In each of the grid there is a kind of plant. The pl ...

  4. 牛客第二场-J-farm-二维树状数组

    二维树状数组真的还挺神奇的,更新也很神奇,比如我要更新一个区域内的和,我们的更新操作是这样的 add(x1,y1,z); add(x2+1,y2+1,z); add(x1,y2+1,-z); add( ...

  5. 第k小团(Bitset+bfs)牛客第二场 -- Kth Minimum Clique

    题意: 给你n个点的权值和连边的信息,问你第k小团的值是多少. 思路: 用bitset存信息,暴力跑一下就行了,因为满足树形结构,所以bfs+优先队列就ok了,其中记录下最后进入的点(以免重复跑). ...

  6. 走环概率问题(至今有点迷)--牛客第二场( Eddy Walker)

    思路: 概率结论题,好像属于线性递推,现在也不太懂(lll¬ω¬) #define IOS ios_base::sync_with_stdio(0); cin.tie(0); #include < ...

  7. 2020牛客暑期多校训练营 第二场 B Boundary 计算几何 圆 已知三点求圆心

    LINK:Boundary 计算几何确实是弱项 因为好多东西都不太会求 没有到很精通的地步. 做法很多,先说官方题解 其实就是枚举一个点 P 然后可以发现 再枚举一个点 然后再判断有多少个点在圆上显然 ...

  8. 牛客网暑期ACM多校训练营(第二场)message

    传送门:https://ac.nowcoder.com/acm/problem/16631 题意 对于直线y=ax+b,给出n个的a[i]和b[i].m次询问,每次询问给出直线y=cx+d的c[i]和 ...

  9. 巅峰极客第二场CTF部分writeup

    word-MISC 微信回答问题+word字体里. sqli-WEB 注册个admin空格即可,长字符截断. 晚上把后续的写出来.现在睡觉

随机推荐

  1. 求先序排列(NOIP2001&NOIP水题测试(2017082301))

    题目链接:求先序排列 这道题讲白了,就是数的构造,然后遍历. 思路大致是这样: 我们先通过后序遍历,找到当前区间的根,然后在中序遍历中找到根对应的下标,然后就可以分出左右子树,建立当前根与左右子树根的 ...

  2. Elastic serarch 安装

    1.安装 1.1下载最新的 elasticsearch-6.5.4.tar.gz 1.2解压 tar -zxvf elasticsearch-6.5.4.tar.gz 1.3 创建用户 elastic ...

  3. c#用EPPLUS操作excel

    参考: http://www.cnblogs.com/rumeng/p/3785748.html http://www.cnblogs.com/libla/p/5824296.html#3818995 ...

  4. zl

    https://mooc.study.163.com/course/2001281002?tid=2001392029&_trace_c_p_k2_=a1ef6cb9a64342008c8f5 ...

  5. 关于DOM级别的一些问题,DOM0,DOM1,DOM2

    之前看书没太注意这个问题,直到我今天看书看到一个DOM0级,于是我就在群里问了下各个级别的意思区别.. 首先我们的确定标准了是没有DOM0级的.在平时阅读的时候可能会读到DOM0级(DOM Level ...

  6. Keras人工神经网络多分类(SGD)

    import numpy as np import pandas as pd from keras.models import Sequential from keras.layers import ...

  7. Asp.net 修改已有数据的DataTable中某列的数据类型

    DataTable dt_PI = new DataTable(); //克隆表结构 dt_PI = ds.Tables[].Clone(); dt_PI.Columns["FLTFullP ...

  8. 误删文件不用怕 grep命令帮你恢复

    作为长期的电脑使用者,肯定会有误删文件的经历,在 Mac OS X 和 Windows 上删除的文件都会默认进 “回收站”.在 Linux 上如果事先没有用别名(alias)修改默认的 rm 功能,r ...

  9. noip第15课作业

    1. 累加求和 给定n(1<=n<=100),用递归的方法计算1+2+3+4+5+......+(n-1)+n. 输入:一个大于等于1的整数. 输出:输出一个整数. [样例输入] 5 [样 ...

  10. mysql_事务

    事务是针对数据的,不是针对结构的 存储引擎innodb支持事务,myisam不支持事务需求:有一张银行账户表,有A用户给B账户转账,A账户减少,B账户增加,但是A操作之后断电. 解决方案:A减少钱,但 ...