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;
}