rt,这可行吗(在只查询最大和最小的两个实数根情况下)?我自己试了一下跑不出答案(应该是我写挂了)。
#include<bits/stdc++.h>
using namespace std;
#define eps 1e-4
double a, b, c, d;
int cnt;
double check(double x){
return a * x * x * x + b * x * x + c * x + d;
}
bool checke(double x){
return a * x * x * x + b * x * x + c * x + d == 0;
}
double sol;
void SA(){
double T = 1000,dT = 0.997;
while(T > 1e-10){
double newsoll = (RAND_MAX - rand() * 2) * T;
double newsol = check(newsoll);
if(newsol - sol > 0 && (checke(newsoll)))sol = newsoll;
else if(exp(-(newsol - sol) / T) < double(rand()* 1.0 / RAND_MAX) && checke(newsoll))sol = newsoll;
T *= dT;
}
}
signed main()
{
srand(54564646);
cin >> a >> b >> c >> d;
SA();
cout << fixed << setprecision(2) << sol << " ";
return 0;
}