7/21 B 解题报告
仍然大水,求解一个方程,二分经典用法。
以下是代码(可直接AC):
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
int t;
long long y;
long double res;
long double tmp;
double low=0,high=100;
double mid=53;
bool flag;
cin>>t;
while(t--)
{
flag=false;
low=0;high=100;mid=53;
cin>>y;
if(y<6||y>807020306)//先特判一些答案
cout<<"No solution!\n";
else{
while(low<high)//二分
{
res=8*mid*mid*mid*mid+7*mid*mid*mid+2*mid*mid+3*mid+6;
//tmp=mid-ceill(mid);
if(abs(res-y)<1e-4)
{
flag=true;
cout<<setiosflags(ios::fixed)<<setprecision(4);
cout<<mid<<endl;
break;
}else{
if(res>y)
{
high=mid;
mid=(low+high)/2;
}else{
low=mid;
mid=(low+high)/2;
}
}
}
if(!flag)
cout<<"No solution!\n";
}
}
return 0;
}