HDU 5461 Largest Point (水)
2015-09-19 20:08
253 查看
网络赛水题,主要是对t[i]平方,和t[i]分别排序,,然后先根据b的正负判断b该与哪个数相乘,然后在给a找数乘。
#pragma warning(disable:4996) #include <cmath> #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <vector> using namespace std; const int N = 6000005; typedef long long LL; LL t ; int n; LL a, b; vector<LL>vec; int main(){ int T; scanf("%d", &T); int kase = 1; while (T--){ scanf("%d %lld %lld", &n, &a, &b); vec.clear(); for (int i = 1; i <= n; i++){ int x; scanf("%d", &x); t[i] = (LL)x; vec.push_back(t[i] * t[i]); } sort(t + 1, t + 1 + n); sort(vec.begin(), vec.end()); LL ans = 0; if (a > 0 && b > 0){ if (vec[vec.size() - 1] == t * t ) { ans = vec[vec.size() - 2] * a + b*t ; } else{ ans = vec[vec.size() - 1] * a + b*t ; } ans = max(ans, a*t * t + b*t[n - 1]); } else if (a > 0 && b < 0) { if (vec[vec.size() - 1] == t[1] * t[1]) { ans = vec[vec.size() - 2] * a + b*t[1]; } else{ ans = vec[vec.size() - 1] * a + b*t[1]; } ans = max(ans, a*t[1] * t[1] + b*t[2]); } else if (a<0 && b>0) { if (vec[0] == t * t ){ ans = vec[1] * a + b*t ; } else{ ans = vec[0] * a + b*t ; } ans = max(ans, a*t * t + b*t[n - 1]); } else if (a < 0 && b < 0){ if (vec[0] == t[1] * t[1]){ ans = vec[1] * a + b*t[1]; } else{ ans = vec[0] * a + b*t[1]; } ans = max(ans, a*t[1] * t[1] + b*t[2]); } else if (a == 0) { if (b >= 0)ans = b*t ; else ans = b*t[1]; } else{ if (a > 0)ans = vec[vec.size() - 1] * a; else ans = vec[0] * a; } printf("Case #%d: %lld\n", kase++, ans); } return 0; }
相关文章推荐
- 计划书
- POJ 1125 Floyd
- Dreamweaver使用过程的小技巧
- hdu5455 Fang Fang(模拟)
- 保持激情
- Car的旅行路线
- IOS 从当前页面直接跳转到首页建议用pop方法
- Java异步事件:轮询与中断
- 初学者如何查阅自然语言处理(NLP)领域学术资料
- Linux下mysql的基本操作
- 快速替换dll命名空间 z
- 用mysqldump --master-data 建立slave
- 关于安卓HTTP请求用HttpUrlConnection还是HttpClient好
- css知多少(8)——float上篇
- win32 线程知识点梳理三
- Trailing Zeroes (III)(lightoj 二分好题)
- LintCode--best-time-to-buy-and-sell-stock(买卖股票的最佳时机)
- 国内外自然语言处理(NLP)研究组
- LeetCode -- Ugly Number II
- 开博第一篇...