HDOJ 5461 Largest Point(瀋陽ネット試合)
2735 ワード
Largest Point
Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 548 Accepted Submission(s): 234
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 .
Output
The output contains exactly
T lines.
For each test case, you should output the maximum value of
at2i+btj .
Sample Input
Sample Output
Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 548 Accepted Submission(s): 234
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 .
Output
The output contains exactly
T lines.
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
, , ,
ac :
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#define INF 0x7fffffffff;
using namespace std;
int num[5000100];
int v[5000100];
int main()
{
int t,k;
long long sum;
int i,j,a,b,n;
long long mi,M;
int cas=0;
scanf("%d",&t);
while(t--)
{
sum=0;
scanf("%d%d%d",&n,&a,&b);
for(i=0;i<n;i++)
scanf("%d",&num[i]);
memset(v,0,sizeof(v));
if(a<0)
{
mi=INF;
for(i=0;i<n;i++)
{
if(fabs(num[i])<mi)
{
k=i;
mi=fabs(num[i]);
}
}
sum+=(a*mi*mi);
v[k]=1;
}
else
{
if(a>0)
{
M=-INF;
for(i=0;i<n;i++)
{
if(fabs(num[i])>M)
{
M=fabs(num[i]);
k=i;
}
}
sum+=(a*M*M);
v[k]=1;
}
}
if(b<0)
{
mi=INF;
for(i=0;i<n;i++)
{
if(num[i]<mi&&!v[i])
{
mi=num[i];
}
}
sum+=(b*mi);
}
else
{
if(b>0)
{
M=-INF;
for(i=0;i<n;i++)
{
if(num[i]>M&&!v[i])
{
M=num[i];
}
}
sum+=(b*M);
}
}
printf("Case #%d: %lld
",++cas,sum);
}
return 0;
}