【题解】A23330.最大四边形面积
题目链接:最大四边形面积
题目有配图参考,应该非常好理解。有一个动点
思路分析
本题可以用暴力三分的解法,也可以使用数学的方法来快速计算答案。关于三分算法的代码和解释在本文的后半部分。
前置知识:
- 了解并熟悉基本代数函数。
- 了解一元二次函数。
- 拥有初中数学基础更好。
如果对一元二次函数不熟悉,可以参考文章:一元二次函数 by 一只姜。
计算矩形的面积比较简单,那就是矩形的底边长乘上矩形的高。很显然,矩形的底边长就是这个动点
很显然,对于这个一元二次函数,这个函数的最大值就是本问题的解。如果这个一元二次函数的开口向下,那么我们就需要求出这个函数的顶点坐标,其中顶点的
如何判断函数的开口朝向?如果
那么当
总结
- 如果
,输出 。 - 如果
,输出 。
三分算法
三分算法 (Ternary Search) 是一种用于在单峰函数(即函数在一个区间内单调递增,然后单调递减,或者先单调递减然后单调递增)的范围内找到 最大值 或 最小值 的优化方法。它的工作原理于二分搜索类似,但每次将搜索区间分成三部分,而不是两部分。
在二分算法中,我们一般是以区间的中值进行二分。但在三分算法,我们需要将区间分成了三个部分。设当前枚举的区间在
在这道题中,我们并不直接三分本问题的解,而是计算可以构成最大矩形面积的
结论证明
为了验证公式结论的正确性,可以通过分析面积的变化率来证明。为方便起见,在后问中定义
首先先根据面积公式可以得到
。 。
计算可得
因此,只有当
证毕
AC 代码
使用数学方法的 AC 代码如下:
#include <iostream>
#include <algorithm>
#define int long long
using namespace std;
int t;
double a, b;
signed main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> t;
while(t--){
cin >> a >> b;
if (a >= 0) {
printf("-1\n");
continue;
}
double x = (b * (-1)) / (2 * a);
double ans = x * (a * x + b);
printf("%.10lf\n", ans);
}
return 0;
}
使用三分法的 AC 代码如下:
#include <iostream>
#include <cmath>
#include <limits>
using namespace std;
int t; double k, b;
// 计算正方形面积
double area(double k, double b, double x) {
return x * (k * x + b);
}
// 三分法
double ternarySearch(double k, double b) {
double left = 0;
// 与x轴的交点横坐标。
double right = -b / k;
while (right - left > 1e-7) {
double leftThird = left + (right - left) / 3;
double rightThird = right - (right - left) / 3;
if (area(k, b, leftThird) > area(k, b, rightThird))
right = rightThird;
else left = leftThird;
}
return area(k, b, (left + right) / 2);
}
int main() {
cin >> t;
while (t--) {
cin >> k >> b;
if (k >= 0) cout << -1 << endl;
else {
double maxArea = ternarySearch(k, b);
printf("%.6lf\n", maxArea);
}
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具