bzoj 4570: [Scoi2016]妖怪 凸包
题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=4570 题解 我们知道如果一个怪物要取到攻击力的最大值,那么一定是把防御力都转化了 所以我们可以把题目转化成这个式子 求 \(min(max(atk + den + \frac{a}{b}dnf + \frac{b}{a}atk))\) 我们设 \(k = -\frac{b}{a}\) 那么上式变为了 \(min(max(atk + den - (\frac{1}{k}dnf + k*atk)))\) 右侧括号里是对勾函数的形式,我们由数学知识得 \(k = -\sqrt{\frac{dnf}{atk}}\) 时取得最值 现在我们尝试把所有的点映射到二维平面 设点 \((x,y)\) ,假设通过了一条斜率为 \(k(k < 0)\) 的直线 我们通过计算发现这个直线的横纵截距之和即为我们上面的计算式 而当 \(k = -\sqrt{\frac{dnf}{atk}}\) 横纵截距之和最小 所以问题转化成了为二维平面上的一些点确定一些平行线通过这些点使得最大的横纵截距之和最小 我们知道最大的条直线一定是通过上凸壳上的点的 所以我们枚举上凸壳上的点即可 #include <cmath> #include <cstdio> #include <cstring> #include