题目大意:根据题目所给定的公式,和后面给的一个Y值,在0~100的区间上求x的值。
解题思路:将公式求导可以证明曲线在0~100这个区间上是单调递增的,所以可以用二分搜索法去做,因为做这道题目的时候实在训练赛的时候,而且以前没有写过二分的题目,所以没想太多,直接写了一个递归的二分搜索,其实只要用一个whlie循环就可以搞定。
#include <stdio.h>
#include <math.h>
int t, y;
long long count(double x){
double sum = 8 * pow(x, 4) + 7 * pow(x, 3) + 2 * pow(x, 2) + 3 * x + 6 - y;
return floor(sum * 10000);
}
void dfs(double a, double b){
long long x = count((a + b) / 2.0);
if (x == 0)
printf("%.4lf\n", (a + b) / 2.0);
else if (x > 0)
dfs(a, (a + b) / 2.0);
else
dfs((a + b) / 2.0, b);
}
int main(){
scanf("%d", &t);
while (t--){
scanf("%d", &y);
long long a = count(0);
long long b = count(100);
if (a == 0)
printf("0.0000\n");
else if (b == 0)
printf("100.0000\n");
else if (a > 0 && b < 0)
dfs(100, 0);
else if (a < 0 && b > 0)
dfs(0, 100);
else
printf("No solution!\n");
}
return 0;
}