题意:
给出一个数列,我们要在这里找出两个数,使得题意中那个表达式最大。
思路:
排两个序就好了啊,看代码一下就懂了。
代码:
#include <cstdio>
#include <algorithm>
using namespace std;
const long long maxn = 5 * 1000000 + 10;
struct Node {
long long id, x;
}aa[maxn], bb[maxn];
bool cmp(Node n1, Node n2) {
if(n1.x != n2.x) {
return n1.x > n2.x;
}
return n1.id < n2.id;
}
int main() {
long long n, a, b;
long long t;
long long x;
scanf("%I64d",&t);
for(long long kase = 1; kase <= t; kase++) {
scanf("%I64d%I64d%I64d",&n, &a, &b);
for(long long i = 1; i <= n; i++) {
scanf("%I64d",&x);
aa[i].id = i;
aa[i].x = x * x * a;
bb[i].id = i;
bb[i].x = b * x;
}
sort(aa + 1, aa + 1 + n, cmp);
sort(bb + 1, bb + 1 + n, cmp);
long long ans;
if(aa[1].id != bb[1].id) {
ans = aa[1].x + bb[1].x;
} else {
ans = aa[1].x + bb[2].x;
ans = max(ans, aa[2].x + bb[1].x);
}
printf("Case #%I64d: %I64d\n", kase, ans);
}
return 0;
}