Largest Point

Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)

Total Submission(s): 1102    Accepted Submission(s): 429

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 nintegers 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

题意给了a b的两个值,然后给了一大堆t的值,问在这些t的值里面求最大的 at2i+btj.

分情况讨论,对于a大于零小于零,b大于零小于零。然后记录最大值 次大值 最小值 次小值 还有一个绝对值最小值,这五个值就够用了。

代码:

#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#pragma warning(disable:4996)
using namespace std; long long test, n, a, b;
long long i, j;
long long abs_min, max1, max2, min1, min2; int main()
{ long long temp;
cin >> test;
for (i = 1; i <= test; i++)
{
abs_min = 1000005;
max1 = -1000005;
max2 = -1000005;
min1 = 1000005;
min2 = 1000005; cin >> n >> a >> b; for (j = 1; j <= n; j++)
{
scanf("%lld",&temp); if (abs(temp) < abs_min)
{
abs_min = abs(temp);
}
if (temp > max1)
{
max2 = max1;
max1 = temp;
}
else if (temp > max2)
{
max2 = temp;
} if (temp < min1)
{
min2 = min1;
min1 = temp;
}
else if (temp < min2)
{
min2 = temp;
}
}
long long res;
if (a >= 0 && b>=0)
{
res = a*max1* max1 + b*max2;
res = max(res, a*min1 * min1 + b*max1);
}
else if (a >= 0 && b <= 0)
{
res = a*max1 * max1 + b*min1;
res = max(res, a*min1 * min1 + b*min2);
}
else if (a <= 0 && b <= 0)
{
if (min1 == abs_min)
{
res = a*abs_min*abs_min + b*min2;
}
else
{
res = a*abs_min*abs_min + b*min1;
}
}
else
{
if (max1 == abs_min)
{
res = a*abs_min*abs_min + b*max2;
}
else
{
res = a*abs_min*abs_min + b*max1;
}
}
cout << "Case #"<<i<<": "<<res<< endl;
} return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

最新文章

  1. C/C++的开发环境安装
  2. 飞思卡尔imx6开发板Linux下GPIO驱动
  3. 使用NPOI2.1.3.1版本导出word附带表格和图片
  4. Swift内存管理、weak和unowned以及两者区别
  5. loj 1426(dfs + bfs)
  6. jQuery EasyUI教程之datagrid应用(一)
  7. LM-Sensors unable to load driver module
  8. 【NS2仿真】TCP与UDP混合
  9. 操作sqlserver数据库常用的三个方法
  10. Swift-07-析构器deinit
  11. 通过ping确定网卡mtu
  12. linux FTP 批量下载文件
  13. 怎么样sourceforge开源项目发现,centos安装-同htop安装案例
  14. node.js使用免费的阿里云ip查询获取ip所在地
  15. outlook关闭时最小化工具
  16. cocos2d 利用cocosStudio制作合图(plist与png)
  17. 深入理解hello world
  18. Maven学习(三)maven原理概念详述
  19. 【转】java 线程的几种状态
  20. [BZOJ1497]最大获利

热门文章

  1. 修剪草坪 HYSBZ - 2442
  2. Core data 如何查看ObjectId
  3. Matplotlib 入门
  4. js学习(四)
  5. Largest Beautiful Number CodeForces - 946E (贪心)
  6. POJ 3090 欧拉函数
  7. mysql sql语句不同平台上大小写区分
  8. Oracle--sqlplus--常用命令
  9. NIO组件 Selector(选择器)
  10. Spring配置数据源以及hibernate