zoukankan      html  css  js  c++  java
  • 【模板】三分法(洛谷P3382)

    Description

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

    Input

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

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

    Output

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

    Solution

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    int n;
    double l,r,x[100];
    double calc(double t)
    {
    	double ans=x[n+1],X=1;
    	for (int i=n;i>=1;i--)
    	{
    		X=X*t;
    		ans=ans+x[i]*X;
    	}
    	return ans;
    }
    int main()
    {
    	scanf("%d%lf%lf",&n,&l,&r);
    	for (int i=1;i<=n+1;i++) scanf("%lf",&x[i]);
    	for (int i=1;i<=100;i++)
    	{
    		double mid1=(l+r)/2,mid2=(mid1+r)/2;
    		if (calc(mid1)>calc(mid2)) r=mid2;
    		else l=mid1;
    	}
    	printf("%.5lf
    ",l);
    	return 0;
    }
    
    
  • 相关阅读:
    UML-如何画操作契约?
    UML-操作契约是什么?
    UML-SSD总结
    UML-如何画SSD?
    UML-SSD-为什么要画SSD?
    UML-SSD-定义
    系统幂等性设计
    UML-领域模型-例子与总结
    UML-领域模型-属性
    UML-领域模型-添加关联和属性
  • 原文地址:https://www.cnblogs.com/Code-Geass/p/9927829.html
Copyright © 2011-2022 走看看