博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU5461 Largest Point 思维 2015沈阳icpc
阅读量:6068 次
发布时间:2019-06-20

本文共 2565 字,大约阅读时间需要 8 分钟。

Largest Point

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

Total Submission(s): 3065    Accepted Submission(s): 1078

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 ij 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 (2n5×106), a (0|a|106) and b (0|b|106). The second line contains n integers t1,t2,,tn where 0|ti|106 for 1in.
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
 

 

Source
 
 
题意:
  求a*ti*ti+b*tj的最大值,ti,tj是num数组里的两个数
分析:
  分情况考虑a和b为正为负的情况,当a,b为正时ti,tj要尽量大,因为a*ti*ti的影响大于b*tj,所以ti优先取最大值,在ti取完最大值后tj再来取剩下的最大值(这里用个map判断是否还剩余最大值,最大值可能有多个或者ti取了负的最大值)
  然后是为负的情况用同样的方法计算就行
#include #include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define debug(a) cout << #a << " " << a << endl#define inf 0x17a6e6736e9using namespace std;const int maxn = 5*1e6 + 10;const int mod = 1e9 + 7;typedef long long ll;ll s1[maxn], s2[maxn];int main() { ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); ll T, t = 0; cin >> T; while( T -- ) { t ++; ll n, a, b; cin >> n >> a >> b; map
mp; for( ll i = 0; i < n; i ++ ) { cin >> s1[i]; s2[i] = abs(s1[i]); mp[s1[i]] ++; } sort( s2, s2+n ); sort( s1, s1+n ); ll sum = 0; if( a > 0 ) { sum += a*s2[n-1]*s2[n-1]; if( b > 0 ) { if( mp[-s2[n-1]] ) { mp[-s2[n-1]] --; } else { mp[s2[n-1]] --; } if( mp[s1[n-1]] > 0 ) { sum += b*s1[n-1]; } else { sum += b*s1[n-2]; } } else if( b < 0 ) { if( mp[s2[n-1]] ) { mp[s2[n-1]] --; } else { mp[-s2[n-1]] --; } if( mp[s1[0]] > 0 ) { sum += b*s1[0]; } else { sum += b*s1[1]; } } } else if( a < 0 ) { sum += a*s2[0]*s2[0]; if( b > 0 ) { if( mp[-s2[0]] ) { mp[-s2[0]] --; } else { mp[s2[0]] --; } if( mp[s1[n-1]] > 0 ) { sum += b*s1[n-1]; } else { sum += b*s1[n-2]; } } else if( b < 0 ) { if( mp[s2[0]] ) { mp[s2[0]] --; } else { mp[-s2[0]] --; } if( mp[s1[0]] > 0 ) { sum += b*s1[0]; } else { sum += b*s1[1]; } } } cout << "Case #" << t << ": " << sum << endl; } return 0;}

  

转载于:https://www.cnblogs.com/l609929321/p/9398505.html

你可能感兴趣的文章
什么是服务台,他对企业有何作用
查看>>
产品经理网站列表
查看>>
转: HTTP Live Streaming直播(iOS直播)技术分析与实现
查看>>
Git 使用初体验
查看>>
Android Studio使用技巧系列教程(二)
查看>>
VMware ESXi客户端连接控制台时提示"VMRC控制台连接已断开...正在尝试重新连接"的解决方法...
查看>>
深度优先搜索之小z的房子与验证码识别
查看>>
ABP源码分析三十一:ABP.AutoMapper
查看>>
fragment和fragmentactivity解析
查看>>
MySql数据库字段排序规则不一致产生的一个问题
查看>>
python模块 mysql-python安装(在ubuntu系统下)
查看>>
深入理解JavaScript系列(结局篇)
查看>>
集锦.txt
查看>>
linux配置防火墙详细步骤(iptables命令使用方法)
查看>>
项目中导入导出两个关联的库
查看>>
linux命令之tail
查看>>
C#匹配中文字符串的4种正则表达式分享
查看>>
转:android git开源项目列表
查看>>
LINUX 中的 TCP/IP协议 参数详解
查看>>
String 与StringBuffer的区别与使用
查看>>