http://acm.hdu.edu.cn/showproblem.php?pid=5461
Analysis: At the beginning of the very scattered a lot of things to write, and later found that you can store a*num*num and B*num values, and then determine the maximum value.
#include <iostream>#include<stdio.h>#include<string.h>#include<string>#include<vector>#include<algorithm>#include<map>#include<queue>#include<stack>#include<math.h>using namespacestd;#defineMet (A, b) memset (A, B, sizeof (a))Const intmaxn=5000007;#defineOO 0x3f3f3f3fConst intMOD = 1e9+7; typedefLong LongLL;intNUM[MAXN];structnode{LL sum; intindex;} A[MAXN], B[MAXN];intCMP (node p, node Q) {returnP.sum>q.sum;}intMain () {intT, N, A, B, cnt=1; LL num; scanf ("%d", &T); while(T--) {scanf (" %d%d%d", &n, &a, &B); for(intI=0; i<n; i++) {scanf ("%lld", &num); A[i].sum=a*num*num; A[i].index=i; B[i].sum=b*num; B[i].index=i; } sort (A, a+N, CMP); Sort (b, B+N, CMP); if(a[0].index! = b[0].index) printf ("Case #%d:%lld\n", cnt++, a[0].sum+b[0].sum); Else{LL P= Max (a[0].sum+b[1].sum, a[1].sum+b[0].sum); printf ("Case #%d:%lld\n", cnt++, p); } } return 0;}View Code
Largest point hdu 5461