P1883 函数

题目链接

P1883 函数

思路

举例

题目中的 F ( x ) F(x) F(x) 看起来很复杂,但由于每个 f ( x ) f(x) f(x) 的二次项系数 a a a 都不是负数,故 F ( x ) F(x) F(x) 是一个单谷函数。直接说出结论可能有些令人难以接受,不妨举出两个例子。

第一个例子是 a a a 大于0的情况,即 f 1 ( x ) = x 2 , f 2 ( x ) = x 2 − 2 x + 10 f_1(x)=x^2,f_2(x)=x^2-2x+10 f1(x)=x2,f2(x)=x22x+10 ,图像如下:
在这里插入图片描述

显然,当 x ≥ 5 x≥5 x5 时, f 1 ( x ) ≥ f 2 ( x ) f_1(x)≥f_2(x) f1(x)f2(x) ;当 0 ≤ x < 5 0≤x<5 0x<5 时, f 1 ( x ) < f 2 ( x ) f_1(x)<f_2(x) f1(x)<f2(x) 。所以在区间 [ 0 , 5 ) [0, 5) [0,5) 上, F ( x ) F(x) F(x) f 2 ( x ) f_2(x) f2(x) 的函数值;所以在区间 [ 5 , 1000 ] [5, 1000] [5,1000] 上, F ( x ) F(x) F(x) f 1 ( x ) f_1(x) f1(x) 的函数值。显然 F ( x ) F(x) F(x) 的图像是一个单谷函数,有最小值。

第二个例子是 a a a 等于0的情况,即 f 1 ( x ) = x 2 , f 2 ( x ) = x + 2 f_1(x)=x^2,f_2(x)=x+2 f1(x)=x2,f2(x)=x+2 ,图像如下:
在这里插入图片描述

显然,当 x ≥ 2 x≥2 x2 时, f 1 ( x ) ≥ f 2 ( x ) f_1(x)≥f_2(x) f1(x)f2(x) ;当 0 ≤ x < 2 0≤x<2 0x<2 时, f 1 ( x ) < f 2 ( x ) f_1(x)<f_2(x) f1(x)<f2(x) 。所以在区间 [ 0 , 2 ) [0, 2) [0,2) 上, F ( x ) F(x) F(x) f 2 ( x ) f_2(x) f2(x) 的函数值;所以在区间 [ 2 , 1000 ] [2, 1000] [2,1000] 上, F ( x ) F(x) F(x) f 1 ( x ) f_1(x) f1(x) 的函数值。显然 F ( x ) F(x) F(x) 的图像是一个单谷函数,有最小值。

通过以上两个例子,可推得只要 a ≥ 0 a≥0 a0 那么无论增加多少个二次函数(或者退化为一次函数),最终形成的函数 F ( x ) F(x) F(x) 势必是一个单谷函数,有最小值,故想到使用三分法求最小值。

三分法

对于初始的区间,左端点 l e f t left left 为0,右端点 r i g h t right right 为1000,左三等分点 m i d L midL midL 和右三等分点 m i d R midR midR 在循环中更新。

如果 F ( m i d L ) > F ( m i d R ) F(midL) > F(midR) F(midL)>F(midR) ,说明函数的最小值点在区间 [ m i d L , r i g h t ] [midL, right] [midL,right] ,故更新 l e f t left left m i d L midL midL ;否则说明函数的最小值点在区间 [ l e f t , m i d R ] [left, midR] [left,midR] ,故更新 r i g h t right right m i d R midR midR 。如果不理解三分的更新子区间,请参考算法——三分法。

当区间长度小于指定精度 p r e c i s i o n precision precision 时,退出循环,输出结果。详见代码。

使用inline

题解中使用了关键字 i n l i n e inline inline ,只要一个函数被 i n l i n e inline inline 修饰(这种函数被称为内联函数),那么使用该函数的地方会粘贴函数体里面的代码,从而加快函数的调用,并且减少栈空间的浪费。求 f 1 ( x ) , f 2 ( x ) , . . . , f n ( x ) f_1(x), f_2(x),...,f_n(x) f1(x),f2(x),...,fn(x) 的函数值被使用了很多次,故使用内联函数加快执行速度。

代码

#include <iostream>
#include <cstdio>
using std::cin, std::cout;
const int N = 1e4 + 5;						// 数组长度
const double precision = 1e-9;				// 精度
/*n是二次函数的个数		a[]保存二次项系数b[]保存一次项系数		c[]保存常数项
*/
int n, a[N], b[N], c[N];
inline double func(double x, int num) {		// 求第num个二次函数在x处的取值return a[num] * x * x + b[num] * x + c[num];
}
double getFuncMax(double x) {				// 求F(x)在x处的取值double res = func(x, 0);for (int i = 1; i < n; i++) {double temp = func(x, i);res = res > temp ? res : temp;}return res;
}
void process() {							// 每个测试案例的解决方案cin >> n;for (int i = 0; i < n; i++) {cin >> a[i] >> b[i] >> c[i];}double left = 0.0, right = 1000.0, midL, midR;while (right - left > precision) {midL = left + (right - left) / 3.0;midR = right - (right - left) / 3.0;if (getFuncMax(midL) > getFuncMax(midR)) {left = midL;} else {right = midR;}}printf("%.4lf\n", getFuncMax(left));	// left是F(x)的最小值点
}
int main() {int t;									// 测试案例的个数cin >> t;while (t-- > 0) {process();}return 0;
}

说明

本文的两个函数图像由 G e o G e b r a GeoGebra GeoGebra 生成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/239531.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

视频姿态估计:DeciWatch

DeciWatch: A Simple Baseline for 10 Efficient 2D and 3D Pose Estimation解析 摘要1. 简介2. Related Work2.1 高效的人体姿态估计2.2 Motion Completion(运动补全)3. Method3.1 问题定义和概述3.2 获取采样姿势3.3 Denoising the Sampled Poses(去噪采样的姿态)3.4 Rec…

Ubuntu环境下使用Livox mid 360

参考文章&#xff1a; Ubuntu 20.04使用Livox mid 360 测试 FAST_LIO-CSDN博客 一&#xff1a;Livox mid 360驱动安装与测试 前言&#xff1a; Livox mid360需要使用Livox-SDK2&#xff0c;而非Livox-SDK&#xff0c;以及对应的livox_ros_driver2 。并需要修改FAST_LIO中部…

FastAPI实现文件上传下载

FastAPI实现文件上传下载 1.后端FastAPI2.后端html3.效果 最近的项目需求&#xff0c;是前端vue&#xff0c;后端fastAPI&#xff0c;然后涉及到图像的消息发送&#xff0c;所以需要用fast写文件上传下载的接口&#xff0c;这里简单记录一下。 1.后端FastAPI import os.path i…

P1308 [NOIP2011 普及组] 统计单词数

P1308 [NOIP2011 普及组] 统计单词数 P1308 [NOIP2011 普及组] 统计单词数 P1308 [NOIP2011 普及组] 统计单词数 题意 一行&#xff0c;如果在文章中找到给定单词则输出两个整数&#xff0c;两个整数之间用一个空格隔开&#xff0c;分别是单词在文章中出现的次数和第一次出现…

【安全】audit的一些问题以及需要注意的地方

audit的一些问题以及需要注意的地方 1 audit存在的一些问题 1.1 audit_cmd_mutex锁占用的问题 当内核生成审计日志后&#xff0c;会以单播形式发送给用户态的某个进程&#xff0c;因此&#xff0c;某个程序如果想要接受审计日志&#xff0c;需要先调用audit_set_pid&#xf…

.net core webapi 大文件上传到wwwroot文件夹

1.配置staticfiles(program文件中) app.UseStaticFiles();2.在wwwroot下创建upload文件夹 3.返回结果封装 namespace webapi;/// <summary> /// 统一数据响应格式 /// </summary> public class Results<T> {/// <summary>/// 自定义的响应码&#xff…

H266/VVC帧内预测编码

预测编码技术 预测编码&#xff08;Prediction Coding&#xff09;是指利用已编码的一个或多个样本值&#xff0c;根据某种模型或方法&#xff0c;对当前的样本值进行预测&#xff0c;并对样本真实值和预测值之间的差值进行编码。 视频中的每个像素看成一个信源符号&#xff…

python3 数据分析项目案例,用python做数据分析案例

本篇文章给大家谈谈python3 数据分析项目案例&#xff0c;以及用python做数据分析案例&#xff0c;希望对各位有所帮助&#xff0c;不要忘了收藏本站喔。 目录 一丶可视化绘图案例 1.曲线图 2.柱形图 3.点线图 4.3D散点图 5. 绘制漏斗图 6. 绘制词云图 二丶包/模块使用示例 (1)…

高通切换到Emergency Download:adb reboot edl

刷机 开机下adb reboot edl 切到QDloader 9008 点下载。 The command “adb reboot edl” is used to reboot an Android device into EDL (Emergency Download) mode using the Android Debug Bridge (ADB) tool. EDL mode is primarily used for low-level firmware flashing…

数据结构---算法的空间复杂度

文章目录 空间复杂度概念实例 空间复杂度 概念 空间复杂度也是一个数学表达式&#xff0c;是对一个算法在运行过程中临时占用存储空间大小的量度 。 空间复杂度不是程序占用了多少bytes的空间&#xff0c;因为这个也没太大意义&#xff0c;所以空间复杂度算的是变量的个数。…

NLP中的嵌入层

在自然语言处理&#xff08;NLP&#xff09;中&#xff0c;嵌入层&#xff08;Embedding Layer&#xff09;是一个特殊的层&#xff0c;通常用于深度学习模型的第一层&#xff0c;它的作用是将离散的文本数据&#xff08;如单词或短语&#xff09;转换为连续的向量表示。每个单…

LLM之RAG实战(八)| 使用Neo4j和LlamaIndex实现多模态RAG

人工智能和大型语言模型领域正在迅速发展。一年前&#xff0c;没有人使用LLM来提高生产力。时至今日&#xff0c;很难想象我们大多数人或多或少都在使用LLM提供服务&#xff0c;从个人助手到文生图场景。由于大量的研究和兴趣&#xff0c;LLM每天都在变得越来越好、越来越聪明。…

[node]Node.js 模块系统

[node]模块系统 Node.js中的模块系统模块的使用模块的导入模块的导出导出多个值导出默认值导出可传参的函数 文件查找策略从文件模块缓存中加载从原生模块加载从文件加载 Node.js中的模块系统 为了让Node.js的文件可以相互调用&#xff0c;Node.js提供了一个简单的模块系统。 …

【第七在线】数据分析与人工智能在商品计划中的应用

随着技术的不断进步&#xff0c;数据分析和人工智能&#xff08;AI&#xff09;已经成为了现代商品计划的关键组成部分。在服装行业&#xff0c;这两项技术正在帮助企业更好地理解市场需求、优化库存管理、提高生产效率和提供更好的客户体验。本文将深入探讨数据分析和人工智能…

机器学习笔记(二)使用paddlepaddle,再探波士顿房价预测

目标 用paddlepaddle来重写之前那个手写的梯度下降方案&#xff0c;简化内容 流程 实际上就做了几个事&#xff1a; 数据准备&#xff1a;将一个批次的数据先转换成nparray格式&#xff0c;再转换成Tensor格式前向计算&#xff1a;将一个批次的样本数据灌入网络中&#xff…

华为---登录USG6000V防火墙---console、web、telnet、ssh方式登录

目录 一、环境搭建 二、第一次登录USG6000V防火墙&#xff0c;即通过console方式登录 三、用户配置 四、web登录USG6000V防火墙 1. 用web创建的用户通过web方式登录USG6000V防火墙 2. 命令行创建的用户通过web方式登录USG6000V防火墙 五、ssh方式登录USG6000V防火墙 1. 用…

从CTF中学习自增构造webshell

FLAG&#xff1a;那天晚上和你聊了很久&#xff0c;手机烫的和心脏一样 专研方向: 代码审计&#xff0c;Crypto 每日emo&#xff1a;天一亮&#xff0c;时间就不属于我了 从CTF中学习自增构造webshell 前言1.异或2.自增3.取反青少年CTF之ezbypass 前言 今天写了几道代码审计的…

Android MVI架构之UI状态的持有与保存

Android MVI架构之UI状态的持有与保存 我们将介绍状态持有者和其他与 UI 层相关的主题&#xff0c;例如在 Android 上提升状态和保存 UI 状态的位置。 状态持有者 状态持有者通过处理逻辑和/或公开 UI 状态来简化 UI。在本节中&#xff0c;我们将看到如何实现状态持有者以及…

LeetCode-15 三数之和

LeetCode-15 三数之和 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 **注意&#xff1a;**答案中不可以…

Deepin更换仿Mac主题

上一篇博客说了要写一篇deepin系统的美化教程 先看效果图&#xff1a; 准备工作&#xff1a; 1.你自己 嘻嘻嘻 2.能上网的deepin15.11电脑 首先去下载主题 本次需要系统美化3部分&#xff1a;1.图标 2.光标 3.壁纸 开始之前&#xff0c;请先把你的窗口特效打开&#xff0c;…