OMG。。。刚开始用float wa了,改成double就过了
#include <stdio.h>
double f[100*10000+5];
int bsearch(int s, int e, double v)
{
int m = (s + e) / 2;
if(m == s || m == e)
return (v - f[s]) < (f[e] - v) ? s : e;
else if(f[m] > v)
return bsearch(s, m, v);
else if(f[m] < v)
return bsearch(m, e, v);
else
return m;
}
int main()
{
int i, t, ans;
double p, y;
for(i=0; i<=100*10000; i++){
p = i *1.0 / 10000;
f[i] = 8*p*p*p*p + 7*p*p*p + 2*p*p + 3*p + 6;
}
scanf("%d", &t);
while(t--){
scanf("%lf", &y);
if(f[0] > y || f[100*10000] < y)
printf("No solution!\n");
else
printf("%.4f\n", bsearch(0, 100*10000, y)*1.0/10000);
}
return 0;
}