题目链接:https://www.luogu.org/problem/P3382

题目描述
如题,给出一个N次函数,保证在范围[l,r]内存在一点x,使得[l,x]上单调增,[x,r]上单调减。试求出x的值。

输入格式
第一行一次包含一个正整数N和两个实数l、r,含义如题目描述所示。

第二行包含N+1个实数,从高到低依次表示该N次函数各项的系数。

输出格式
输出为一行,包含一个实数,即为x的值。四舍五入保留5位小数。

输入输出样例
输入

3 -0.9981 0.5
1 -3 -3 1

输出

-0.41421

说明/提示
时空限制:50ms,128M

数据规模:

对于100%的数据:7<=N<=13

样例说明:

如图所示,红色段即为该函数f(x)=x3-3x2-3x+1在区间[-0.9981,0.5]上的图像。

当x=-0.41421时图像位于最高点,故此时函数在[l,x]上单调增,[x,r]上单调减,故x=-0.41421,输出-0.41421。

(Tip.l&r的范围并不是非常大ww不会超过一位数)

三分的知识点

已知:左右端点L、R,要求找到上图中空心点的位置

思路:通过不断缩小 [L,R] 的范围,无限逼近空心点

思想:先取 [L,R] 的中点 mid,再取 [mid,R] 的中点 mmid,通过比较 f(mid) 与 f(mmid) 的大小来缩小范围。
当最后 L=R-1 时,再比较下这两个点的值,我们就找到了答案。
1、当 f(mid) > f(mmid) 的时候,我们可以断定 mmid 一定在空心点的右边
反证法:假设 mmid 在白点的左边,则 mid 也一定在白点的左边,又由 f(mid) > f(mmid) 可推出 mmid < mid,与已知矛盾,故假设不成立。
所以,此时可以将 R = mmid 来缩小范围
2、当 f(mid) < f(mmid) 的时候,我们可以断定 mid 一定在空心点的左边
反证法:假设 mid 在白点的右边,则 mmid 也一定在白点的右边,又由 f(mid) < f(mmid) 可推出 mid > mmid,与已知矛盾,故假设不成立。
同理,此时可以将 L = mid 来缩小范围

利用此思想可以用三分找到空心点的位置
代码

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define eps 1e-12
int n;
double l,r,a[20];
double solve(double x)
{double ans=1,sum=0;for(int i=n+1; i>=1; i--){sum+=ans*a[i];ans*=x;}/*传过来的x相当于函数表达式中的未知量,将未知量代入表达式,求得函数表达式的最终结果*/return sum;
}
int main()
{scanf("%d%lf%lf",&n,&l,&r);for(int i=1; i<=n+1; i++)scanf("%lf",&a[i]);while(r-l>=eps){double mid=l+(r-l)/3;double mmid=r-(r-l)/3;if(solve(mid)-solve(mmid)>=eps)r=mmid;/*一步步缩小范围*/elsel=mid;}printf("%.5lf\n",l);return 0;
}

祝祖国繁荣昌盛

洛谷 P3382(三分查找凹点和凸点)相关推荐

  1. 算法设计 - 二分法和三分法,洛谷P3382

    二分法 二分查找:找目标值位置 二分法是一种适用于特殊场景下的分治算法. 这里的特殊场景指的是,二分法需要作用在一个具有单调性的区间内. 比如,我们熟知的二分查找,就是一种二分法的具体实现,二分查找必 ...

  2. 洛谷 P3382 【模板】三分法

    https://www.luogu.org/problem/show?pid=3382 题目描述 如题,给出一个N次函数,保证在范围[l,r]内存在一点x,使得[l,x]上单调增,[x,r]上单调减. ...

  3. 洛谷P3382 【模板】三分法

    P3382 [模板]三分法 题目描述 如题,给出一个N次函数,保证在范围[l,r]内存在一点x,使得[l,x]上单调增,[x,r]上单调减.试求出x的值. 输入输出格式 输入格式: 第一行一次包含一个 ...

  4. 洛谷试炼场-简单数学问题-二分查找

    洛谷试炼场-简单数学问题 P1147 连续自然数和 题解: 本题给定一个数n,求连续自然数的和为n,用一个前缀数组,low_bound,upper_bound,查找是否是同一个数.O(nlog(n)) ...

  5. 二分查找——A-B数对(洛谷 P1102)

    题目选自洛谷P1102 分析题目,如果决定枚举A,那么问题就变成了统计数列中B+C出现了多少次. 把数列排列,那么B+C 会对应这个数列的连续一段.只要能快速找到这个连续段的左端点和右端点,也就是B+ ...

  6. 二分查找例题(二)洛谷P1163

    题目来自洛谷P1163 题目描述 /**月利率=年利率/12 利滚利**/ #include <iostream> using namespace std; int main() {dou ...

  7. 洛谷 P5318 【深基18.例3】查找文献(dfs bfs 板子题,同时用了unordered_map可以hash查找

    题目描述 原题戳这 冲冲冲 小K 喜欢翻看洛谷博客获取知识.每篇文章可能会有若干个(也有可能没有)参考文献的链接指向别的博客文章.小K 求知欲旺盛,如果他看了某篇文章,那么他一定会去看这篇文章的参考文 ...

  8. 洛谷 - 试炼场(全部题目备份)

    整理的算法模板合集: ACM模板 目录 1.新手村 1 - 1 洛谷的第一个任务 1 - 2 顺序与分支 1 - 3 循环!循环!循环! 1 - 4 数组 1 - 5 简单字符串 1 - 6 过程函数 ...

  9. 洛谷P3391文艺平衡树(Splay)

    题目传送门 转载自https://www.cnblogs.com/yousiki/p/6147455.html,转载请注明出处 经典引文 空间效率:O(n) 时间效率:O(log n)插入.查找.删除 ...

  10. 洛谷P1246C语言,codevs1246 丑数

    题目描述 Description 对于一给定的素数集合 S = {p1, p2, ..., pK}, 来考虑那些质因数全部属于S 的数的集合.这个集合包括,p1, p1p2, p1p1, 和 p1p2 ...

最新文章

  1. .net dataGridView当鼠标经过时当前行背景色变色;然后【给GridView增加单击行事件,并获取单击行的数据填充到页面中的控件中】...
  2. rdcl 报表设置不分页
  3. 全面讲解Python列表数组(一)创建,增删改查,萌新版,
  4. Linux常用命令(第二版) --压缩解压缩命令
  5. axure 素材_Axure原型:超漂亮的系统首页
  6. C语言基础知识整理(选择结构)
  7. 日常((⊙_⊙)…)
  8. windows7修改双系统启动项名称、先后顺序、等待时间
  9. 阿里云短信接口,函数方法
  10. 二、三层交换机与路由器
  11. excel 科学计数批量转换成文本
  12. 服务器已联网 不能远程桌面,几种常见的Windows 服务器无法联网/无法连接远程桌面等故障解决方案...
  13. 百度地图WEB服务-正地理编码使用心得
  14. 使用python+selenium谷歌浏览器驱动查排名
  15. 值得重点推荐的BI软件有哪些?全在这里了
  16. postman如何测试导入任务和导出任务
  17. Form通过js提交
  18. 简练网软考知识点整理-项目整体绩效测量基准
  19. 【python--爬虫】爬取淘女郎照片
  20. 虎扑体育客户端zen源码学习笔记

热门文章

  1. 计算机系统时间无法更改,Win7电脑无法修改系统时间如何解决?
  2. 1024:程序员,你的身体还好吗?
  3. [分布式系列]Gossip协议
  4. 永远做重要而不紧急的事
  5. 【Quant】80+面试,5个offer,Quant大神总结分享各家quant面试题
  6. 初识C++(二)内联函数、atuo、以及范围for的使用
  7. 智能指针之atuo_ptr源码剖析
  8. window的mysql开机自动启动
  9. java poi读取excel数据_java 使用POI读取excel数据
  10. 【深度学习】使用opencv在视频上添加文字和标记框