Math Problem
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3142 Accepted Submission(s): 762
Total Submission(s): 3142 Accepted Submission(s): 762
Problem Description
Here has an function:
f (x )=|a∗x3+b∗x2+c∗x+d | (L≤x≤R )
Please figure out the maximum result of f(x).
f (x )=|a∗x3+b∗x2+c∗x+d | (L≤x≤R )
Please figure out the maximum result of f(x).
Input
Multiple test cases(less than 100). For each test case, there will be only 1 line contains 6 numbers a, b, c, d, L and R.
(−10≤a,b,c,d≤10,−100≤L≤R≤100)
Output
For each test case, print the answer that was rounded to 2 digits after decimal point in 1 line.
Sample Input
1.00 2.00 3.00 4.00 5.00 6.00
Sample Output
310.00
别的没啥可说的,就是有唯一的大坑。。。前方高能= =:
#include <bits/stdc++.h>
#define _ ios_base::sync_with_stdio(0);cin.tie(0);
using namespace std;
double a, b, c, d, L, R;
double f(double x)
{
return abs(a * x * x * x + b * x * x + c * x + d);
}
bool judge(double x)
{
if (x >= L && x <= R)
{
return true;
}
else
{
return false;
}
}
int main()
{
_
while (cin >> a >> b >> c >> d >> L >> R)
{
///cout << 6.0 / 1.5 * 100 << endl;
///cout << 6.0 / (1.5 * 100) << endl;
double ans = max(f(L), f(R));
if (a != 0)
{
double ter = 4 * b * b - 12 * a * c;
if (ter <= 0)
{
printf("%0.2f\n", ans);
continue;
}
double x1 = (-2 * b + (double)sqrt(ter)) / (6 * a);
double x2 = (-2 * b - (double)sqrt(ter)) / (6 * a);
double v;
if (judge(x1) == true && judge(x2) == true)
{
v = max(f(x1), f(x2));
ans = max(ans, v);
}
else if (judge(x1) == true && judge(x2) == false)
{
v = f(x1);
ans = max(ans, v);
}
else if (judge(x1) == false && judge(x2) == true)
{
v = f(x2);
ans = max(ans, v);
}
}
else if (a == 0 && b != 0)
{
double hh = -c / (2 * b);
if (judge(hh) == true)
{
ans = max(ans, f(hh));
}
}
printf("%0.2f\n", ans);
}
return 0;
}