Description
Input
For each test case, the first line contains three integers corresponding to and . The second line contains integers where for .
The sum of for all cases would not be larger than .
Output
For each test case, you should output the maximum value of .
Sample Input
2 3 2 1 1 2 3 5 -1 0 -3 -3 0 3 3
Sample Output
Case #1: 20Case #2: 0
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #include<algorithm> #include<iostream> using namespace std; #define N 5000100 #define INF 0x3f3f3f3f long long s[N]; struct node { long long sum, k; }w[N], p[N]; int cmp(node a, node b) { return a.sum<b.sum; } int main() { int i, n, a, b, T, t=1; scanf("%d", &T); while(T--) { scanf("%d%d%d", &n,&a,&b); for(i=0;i<n;i++) { scanf("%lld", &s[i]); w[i].sum=a*s[i]*s[i]; w[i].k=s[i]; p[i].sum=b*s[i]; p[i].k=s[i]; } sort(w, w+n, cmp); sort(p, p+n, cmp); printf("Case #%d: ",t++); if(w[n-1].k!=p[n-1].k) printf("%lld\n", w[n-1].sum+p[n-1].sum); else { long long ans=max(w[n-1].sum+p[n-2].sum,w[n-2].sum+p[n-1].sum); printf("%lld\n",ans); } } return 0; }