Largest Point
Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 1450 Accepted Submission(s): 579
Problem Description
Given the sequence
A
with
n
integers
t1,t2,⋯,tn
. Given the integral coefficients
a
and
b
. The fact that select two elements
ti
and
tj
of
A
and
i≠j
to maximize the value of
at2i+btj
, becomes the largest point.
Input
An positive integer
T
, indicating there are
T
test cases.
For each test case, the first line contains three integers corresponding to n (2≤n≤5×106), a (0≤|a|≤106) and b (0≤|b|≤106) . The second line contains n integers t1,t2,⋯,tn where 0≤|ti|≤106 for 1≤i≤n .
The sum of n for all cases would not be larger than 5×106 .
For each test case, the first line contains three integers corresponding to n (2≤n≤5×106), a (0≤|a|≤106) and b (0≤|b|≤106) . The second line contains n integers t1,t2,⋯,tn where 0≤|ti|≤106 for 1≤i≤n .
The sum of n for all cases would not be larger than 5×106 .
Output
The output contains exactly
T
lines.
For each test case, you should output the maximum value of at2i+btj .
For each test case, you should output the maximum value of at2i+btj .
Sample Input
2 3 2 1 1 2 3 5 -1 0 -3 -3 0 3 3
Sample Output
Case #1: 20 Case #2: 0
solution:
求a*ti^2+b*tj 且i!=j 直接暴力即可 记录前者和后者最大和次大 用map统计一下最大出现的次数 然后瞎搞即可
#include<cstdio> #include<algorithm> #include<map> using namespace std; typedef long long ll; int n; ll a, b,x,y,z; int main() { int t,cnt=1; scanf("%d", &t); while (t--) { scanf("%d%I64d%I64d", &n, &a, &b); ll max1 = -1e18, max2 = -1e18 - 1, max3 = -1e18, max4 = -1e18 - 1; int pos1, pos3; map<long long, int>q; for (int i = 0; i < n; i++) { scanf("%I64d", &x); y = a*x*x; z = b*x; if (y > max1) { max2 = max1; max1 = y; pos1 = i; q[max1]++; } else if (y > max2) { max2 = y; } if (z > max3) { max4 = max3; max3 = z; pos3 = i; q[max3]++; } else if (z > max4) { max4 = z; } } printf("Case #%d: ", cnt++); if (pos1 != pos3 || q[max1] > 1||q[max3]>1)printf("%I64d\n", max1 + max3); else printf("%I64d\n", max(max1 + max4, max2 + max3)); } return 0; }