本文主要是介绍二分:HDU2899,2199,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
2899.Strange fuction
题意:找到当x取值在0到100是F(x)的最小值。
思路:感觉这就是一道数学题,F(x)在[0,100]内的的最小值即为拐点(一阶导数为0),再用二分找一下答案就行了。
代码实现:
#include<stdio.h>
typedef long long ll;
const double rp=1e-7;
ll y;
double f(double x)
{return 42*x*x*x*x*x*x+48*x*x*x*x*x+21*x*x+10*x-y;
}
double F(double x)
{return 6*x*x*x*x*x*x*x+8*x*x*x*x*x*x+7*x*x*x+5*x*x-y*x;
}
int main()
{int t; scanf("%d",&t);while(t--){scanf("%lld",&y);double l=0,r=100,mid;while(r-l>rp){mid=(l+r)/2;if(f(mid)-0>=rp) r=mid;else l=mid;}printf("%.4f\n",F(l));}return 0;
}
同理也可以练习HDU的2199题
[2199.Can you solve this equation?]
AC代码:
#include<bits/stdc++.h>
using namespace std;
const double p=1e-7;
double f(double x)
{return 8*x*x*x*x+7*x*x*x+2*x*x+3*x+6;
}
int main()
{int T; cin>>T;double y;while(T--){scanf("%lf",&y);if(6-y>p||y-f(100.0)>p){printf("No solution!\n");continue;}double l=0,r=100;while(r-l>p){double mid=(l+r)/2;if(f(mid)-y>=p) r=mid;else l=mid;}printf("%.4f\n",r);}return 0;
}
这篇关于二分:HDU2899,2199的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!