P3382 【模板】三分法

题目提供者HansBug

难度 普及/提高-

题目描述

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



输入输出格式

输入格式:

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

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

输出格式:

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

输入输出样例

输入样例#1:

3 -0.9981 0.5

1 -3 -3 1

输出样例#1:

-0.41421

说明

时空限制:50ms,128M

数据规模:

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

样例说明:

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

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

/*
三分答案做法.
又学了一种三分答案姿势.
mid=(2*l+r)/3,midmid=(l+2*r)/3.
常数要小很多...
(并不会证明).
*/
#include<cstdio>
#define MAXN 101
#define eps 1e-7
using namespace std;
double a[MAXN],ans,l,r;
int n;
double check(double x)
{
double sum=0;
for(int i=1;i<=n;i++)
{
double tot=a[i];
for(int j=1;j<=n-i;j++) tot*=x;
sum+=tot;
}
return sum;
}
void sanfen()
{
double mid,midmid;
while(l+eps<r)
{
//mid=(l+r)/2,midmid=(mid+r)/2;
mid=(2*l+r)/3,midmid=(l+2*r)/3;
if(check(mid)>=check(midmid)) r=midmid,ans=mid;
else l=mid;
}
printf("%.5f",ans);
return ;
}
int main()
{
scanf("%d",&n);
scanf("%lf%lf",&l,&r);n++;
for(int i=1;i<=n;i++) scanf("%lf",&a[i]);
sanfen();
return 0;
}
/*
二分答案.
对函数求导,找f`(x)=0的点.
感觉这题数据应该都是单峰函数.
so 这个方法就ok了.
其实应该还要判断该点两侧导函数是否变号
还有带入端点值比较啥的.
懒没写~.
重要的是昨天刚预习的高二导数求凸形函数
今天就用上了 先让我笑一会儿哈哈哈哈哈哈哈.
*/
#include<iostream>
#include<cstdio>
#define eps 1e-7
#define MAXN 101
using namespace std;
double a[MAXN],ans,l,r;
int n;
double check(double x)
{
double sum=0;
for(int i=1;i<=n;i++)
{
double tot=a[i]*(n-i+1);
for(int j=1;j<=n-i;j++) tot*=x;
sum+=tot;
}
return sum;
}
void erfen()
{
double mid;
while(l+eps<r)
{
mid=(l+r)/2;
if(check(mid)<=0) r=mid,ans=mid;
else l=mid;
}
printf("%.5f",ans);
return ;
}
int main()
{
scanf("%d",&n);
scanf("%lf%lf",&l,&r);n++;
for(int i=1;i<=n;i++) scanf("%lf",&a[i]);n--;
erfen();
return 0;
}

最新文章

  1. 国内首个微信小程序开发者社区www.mntuku.cn
  2. 【Todo】网络编程学习-面向工资编程
  3. App_api设计
  4. 【CF刷题】14-05-12
  5. JQuery源码分析(八)
  6. Apache服务器配置默认首页文件名和网站路径
  7. 【Android Studio使用教程4】Android Studio下载
  8. SpringMVC&ndash;SSH -- RESTful -- JSR303
  9. JSP中Filter中访问Spring管理的beans
  10. Python3基础 函数 关键字参数 的示例
  11. 让python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE等请求
  12. NLP论文泛读之《教材在线评论的情感倾向性分析》
  13. Vert.x 线程模型揭秘
  14. SQLServer之创建唯一聚集索引
  15. go学习day1
  16. 如何使用PhoneGap打包Web App
  17. IT零起步-CentOS6.4部署OpenVPN服务器
  18. jQuery截取字符串、日期字符串转Date、获取html中的纯文本
  19. GO语言基础之并发concurrency
  20. java web 自定义的权限框架

热门文章

  1. (十四)SpringBoot之事务处理
  2. (三)XML基础(3):Xpath
  3. JS OOP 概述
  4. JavaBean 详细
  5. Linux--CentOS 安装 Docker 教程
  6. mongoose整理笔记
  7. js通俗易懂的&amp;&amp;与||或运算
  8. ajax格式,转入后台
  9. 同一个url对应多个视图函数,取第一个视图函数有效
  10. 参数化查询防止Sql注入