【凸包】【Andrew算法】牛客 —message
前置知识点 凸包: 概念 示例图(一) 1 点集Q的凸包(convex hull)是指一个最小凸多边形,满足Q中的点或者在多边形边上或者在其内。右图中由红色 线段 表示的多边形就是点集Q={p0,p1,...p12}的凸包。 2 一组平面上的点,求一个包含所有点的最小的 凸多边形 ,这就是凸包问题了。这可以形象地想成这样:在地上放置一些不可移动的木桩,用一根绳子把他们尽量紧地圈起来,并且为凸边形,这就是凸包了。 ——百度百科 Andrew 算法 是一种求解凸包的一种基本算法 具体过程还不会,等本菜鸡学会了再回来填坑 题意: 有 n 条直线 y=ax+b(a ≠ 0并且总是存在)。 m 次询问,每次询问给出一条直线 y=cx+d,求该直线与已知直线中交点横坐标最大的值是多少,如果没有交点则输出 "No cross"。 学习博客: https://blog.csdn.net/xbb224007/article/details/81158026 讲的超级详细,建议去学习 题解: 有两条直线 y=a*x+b y=c*x+d => x= -(b-d)/(a-c) 这样问题求x的最大值就转化成了求斜率的最小值 这时候就根据凸包求解即可 具体讲解请看上述推荐博客 #include<iostream> #include<algorithm> #include<cmath> #include