找到 f(x)=ax3+bx2+cx+d 的两个驻点横坐标 A 和 B,那么 (−100,A),(A,B),(B,100) 这三个区间一定是单调的,在这三个区间二分答案即可。
double X = (-b - sqrt(b * b - 3 * a * c)) / 3 * a;
double Y = (-b + sqrt(b * b - 3 * a * c)) / 3 * a;
auto bi = [&](...){....}
cout << bi(-100, X) << " " << bi(X, Y) << " " << bi(Y, 100);
感觉这个方法好像算钻了一点空子,题解里的做法也是百花齐放,有点好奇出题人出这道题的时候是想考察什么做法。