【三分】洛谷3382[三分法]题解
2017-10-01 13:46
302 查看
题目概述
给出一个 n 次函数 f(x) ,求 f(ans)=f(x)max,x∈[L,R] ,保证 f(x) 在 [L,R] 上是单峰函数且 [L,ans] 递增, [ans,R] 递减。解题报告
最近考试考三分,然后并没有看出来+不会,所以学一下三分然后水博客。对于先递增再递减的单峰函数(可以不严格递增递减)的峰值,我们可以找到 midL 和 midR 两个三等分点( midL<midR ),然后判断:
f(midL)>f(midR) ,则 ans 不可能出现在 [midR,R] ,考虑 midL 在递增段上和递减段上,很容易证明。那么此时 R=midR−Eps 。
f(midL)≤f(midR) ,则 ans 不可能出现在 [L,midL] (同理)。那么此时 L=midL+Eps 。
先递减再递增的单谷函数也是一样的。
示例程序
#include<cstdio> #include<cmath> using namespace std; typedef double DB; int n;DB a[15],L,R; inline int fcmp(DB a,DB b) {if (fabs(a-b)<1e-10) return 0;if (a<b) return -1;return 1;} inline DB F(DB x) {DB f=0,s=x;for (int i=n;i;i--,s*=x) f+=s*a[i];return f;} int main() { freopen("program.in","r",stdin); freopen("program.out","w",stdout); scanf("%d%lf%lf",&n,&L,&R);for (int i=1;i<=n;i++) scanf("%lf",&a[i]); while (fcmp(L,R)<=0) { DB t=(R-L)/3,midL=L+t,midR=R-t; if (fcmp(F(midL),F(midR))>0) R=midR-1e-6; else L=midL+1e-6; } return printf("%.5lf\n",L),0; }
相关文章推荐
- 洛谷 P3382 【模板】三分法(三分 二分)
- 【题解】期末考试 六省联考 2017 洛谷 P3745 BZOJ 4868 贪心 三分
- 洛谷10月月赛R2·浴谷八连测R3 -Chtholly- 1、2题题解
- 洛谷 P3382 【模板】三分法
- 2014NOIP普级组第二题--比例简化(参考洛谷题解)
- 【BZOJ】【P3672】【Noi2014】【购票】【题解】【线段树+凸包+链剖+三分】
- BZOJ4945 & 洛谷3825 & UOJ317:[NOI2017]游戏——题解
- 洛谷3932:浮游大陆的68号岛——题解
- 洛谷2000:拯救世界——题解
- 【题解】洛谷1200 你的飞碟在这儿…
- 洛谷题解--陶陶摘苹果(升级)
- Luogu 3382(三分)
- 【题解】曼哈顿模拟赛(洛谷)
- 【BZOJ】【P3203】【Sdoi2013】【保护出题人】【题解】【凸包+三分】
- 洛谷 P1498 南蛮图腾 题解报告
- 【题解】洛谷P2740 poj1273 [USACO4.2]草地排水Drainage Ditches
- 洛谷 1373 dp 小a和uim之大逃离 良心题解
- [洛谷模板大赛]题解 模板整理QAQ
- 洛谷4245:【模板】任意模数NTT——题解
- BZOJ4946 & 洛谷3826 & UOJ318:[NOI2017]蔬菜——题解