题目传送: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. 【Web】前端裁剪图片,并上传到服务器(Jcrop+canvas)

    web网站中常常有的功能:上传头像.上传封面等:一般图片都有一定的比例限制,所以需要前端在上传图片时,进行裁剪,并把裁剪后的图片进行上传. 本例采用Jcrop插件实现裁剪效果,canvas裁剪图片,并 ...

  2. NOIP水题测试(2017082401)

    哈,水题测试又来了! 上次的水题简单吧! 答案是以单题形式发布的(旅行家的预算随后发布). 下面来看今天的题,还是水题. 时间限制:5小时 题目一:看上去就很水 题目二:比上面一题还水 题目三:数的划 ...

  3. 9月list

    开学了,我已经是大三的老学姐了,难受! 哇,时间过得好快啊,感觉自己快毕业了,肿么办!!! 9月了,快一年了,其实很多东西都变了,比如你. 9月4日的list:

  4. linux上搭建solr(用tomcat部署)

    环境centos7 及最新版本solr7 1.先在/usr/local下mkdir solr 2.在里面新建一个tomcat目录 3.拷贝已经解压的tomat到/usr/local/solr/tomc ...

  5. 笔记 Bioinformatics Algorithms Chapter2

    Chapter2 WHICH DNA PATTERNS PLAY THE ROLE OF MOLECULAR CLOCKS 寻找模序 一. 转录因子会结合基因上游的特定序列,调控基因的转录表达,但是在 ...

  6. css3实现卡牌旋转与物体发光效果

    效果演示 http://demo.qpdiy.com/hxw/CSS3/rotate+light.html 物体旋转: 卡牌同一位置放2张图片,通过设置3D动画旋转实现 animation: card ...

  7. (拓扑)确定比赛名次 -- hdu -- 1285

    http://acm.hdu.edu.cn/showproblem.php?pid=1285 确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memo ...

  8. Alpha阶段敏捷冲刺(七)

    1.站立式会议 提供当天站立式会议照片一张 2.每个人的工作 (有work item 的ID),并将其记录在码云项目管理中: 昨天已完成的工作. 祁泽文:用java完成了错词,已掌握,陌生单词的图标生 ...

  9. Alpha冲刺 - (3/10)

    Part.1 开篇 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Part.2 成员汇报 组员1(组长)柯奇豪 过去两天完成了哪些任务 ssm框架的使用并实现简单的数据处理 ...

  10. Windows 8创新之路——样章分享

    在电脑里面躺了大约也有半年多的光景了. 在Windows 8.1还有不到一个月的时间里,将这些内容分享出来,也算是对得起自己那段时间的熬夜. 希望大家多提宝贵意见. 谢! 点击标题可浏览SkyDriv ...