hdu2899 Strange fuction(二分+精度)

    xiaoxiao2021-03-25  73

    Problem Description Now, here is a fuction: F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=100) Can you find the minimum value when x is between 0 and 100. Input The first line of the input contains an integer T(1<=T<=100) which means the number of test cases. Then T lines follow, each line has only one real numbers Y.(0 < Y <1e10) Output Just the minimum value (accurate up to 4 decimal places),when x is between 0 and 100. Sample Input 2 100 200 Sample Output -74.4291 -178.8534 Author Redow Recommend lcy | We have carefully selected several similar problems for you: 2199 2289 2298 2141 3400 题意就是求f(x)的最小值。 区间(0<x<100),我们只需要求f`(x0)=0即可。 有f``和(0<x<100)得f``恒>0,那么f(x)在[0,100]单增,那么我们就可以二分出x0. #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cctype> #include<cmath> #include<ctime> #include<string> #include<stack> #include<deque> #include<queue> #include<list> #include<set> #include<map> #include<cstdio> #include<limits.h> #define MOD 1000000007 #define fir first #define sec second #define fin freopen("/home/ostreambaba/文档/input.txt", "r", stdin) #define fout freopen("/home/ostreambaba/文档/output.txt", "w", stdout) #define mes(x, m) memset(x, m, sizeof(x)) #define Pii pair<int, int> #define Pll pair<ll, ll> #define INF 1e9+7 #define inf 0x3f3f3f3f #define Pi 4.0*atan(1.0) #define lowbit(x) (x&(-x)) #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define max(a,b) a>b?a:b typedef long long ll; typedef unsigned long long ull; const double eps = 1e-9; const int maxn = 1e6; const int maxm = 1e6+10; using namespace std; inline int read(){ int x(0),f(1); char ch=getchar(); while (ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=getchar();} while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f; } double f(double x,double y){ return 6*pow(x,7.0)+8*pow(x,6.0)+7*pow(x,3.0)+5*pow(x,2.0)-y*x; } double cacl(double x){ return 42*pow(x,6.0)+48*pow(x,5.0)+21*pow(x,2.0)+10*x; } int main() { int Case=read(); double low,high,y,ans,mid; while(Case--){ cin>>y; low=0,high=100; while(high-low>eps){ mid=(low+high)/2; ans=cacl(mid); if(ans<y){ low=mid; }else{ high=mid; } } printf("%.4f\n",f(mid,y)); } return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-38169.html

    最新回复(0)