#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int n_max = 5e6 + 5;
int t, n, a, b;
struct node
{
long long data;
int id;
bool operator < (const node Next) const
{
return data < Next.data;
}
} A[n_max], B[n_max];
int main()
{
scanf("%d", & t);
int cas = 0;
while(t --)
{
scanf("%d %d %d", & n, & a, & b);
long long temp;
for(int i = 0; i < n; i ++)
{
scanf("%I64d", & temp);
A[i].data = a * temp * temp;
B[i].data = b * temp;
A[i].id = B[i].id = i;
}
sort(A, A + n);
sort(B, B + n);
printf("Case #%d: ", ++ cas);
if(A[n - 1].id != B[n - 1].id)
printf("%I64d\n", A[n - 1].data + B[n - 1].data);
else
printf("%I64d\n", max(A[n - 1].data + B[n - 2].data, A[n - 2].data + B[n - 1].data));
}
return 0;
}
题目:
输入 n a b。之后第二行输入n 个整数t0, t1, t2, t3..tn-1…之后输出方程a * ti * ti + b * tj (i != j)的最大值。
题解:
参考了AC_Gibson的专栏,这确实好水..当时怎么没想到..就是用两个数组 A[] B[] 分别存 a * ti * ti 和 b * tj。排序讨论下AB数组最后2个值即可。(注 : 中间的temp 要用 long long 否则WA)。