Largest Point hdoj 5461 (逻辑+分情况考虑)好题
来源:互联网 发布:软件测试公司排行 编辑:程序博客网 时间:2024/04/29 06:19
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
2
3 2 1
1 2 3
5 -1 0
-3 -3 0 3 3
Sample Output
Case #1: 20
Case #2: 0
//要考虑s的最小绝对值与s的最大值相等或为同一个数时的情况。(在这块错了6次)#include<stdio.h>#include<string.h>#include<math.h>#include<algorithm>using namespace std;#define INF 0x3f3f3f3fint s[3000100];int c[1000100];int main(){int t;int i,j,k,n,a,b;int cnt=1;long long int sum,mm;scanf("%d",&t);while(t--){memset(c,0,sizeof(c));sum=0;scanf("%d%d%d",&n,&a,&b);for(i=1;i<=n;i++)scanf("%d",&s[i]);printf("Case #%d: ",cnt++);if(a>0){mm=-INF;for(i=1;i<=n;i++){if(abs(s[i])>mm){k=i;mm=abs(s[i]);}}c[k]=1;sum+=a*mm*mm;}else{if(a<0){mm=INF;for(i=1;i<=n;i++){if(abs(s[i])<mm){k=i;mm=abs(s[i]);}}c[k]=1;sum+=a*mm*mm;}}if(b>0){mm=-INF;for(i=1;i<=n;i++){if(s[i]>mm&&!c[i]){mm=s[i];}}sum+=b*mm;}else{if(b<0){mm=INF;for(i=1;i<=n;i++){if(s[i]<mm&&!c[i]){mm=s[i];}}sum+=b*mm;}}printf("%lld\n",sum);}}
//这是刚开始写的,错了6次 #include<stdio.h>#include<string.h>#include<math.h>#include<algorithm>using namespace std;int s[5000100];int main(){int t,cnt=1;int n,a,b,i,j;scanf("%d",&t);while(t--){scanf("%d%d%d",&n,&a,&b);for(i=1;i<=n;i++)scanf("%d",&s[i]);printf("Case #%d: ",cnt++);if(a>=0&&b>=0){sort(s+1,s+n+1);if(abs(s[1])>s[n])printf("%lld\n",a*s[1]*s[1]+b*s[n]);elseprintf("%lld\n",a*s[n]*s[n]+b*s[n-1]>a*s[n-1]*s[n-1]+b*s[n]?a*s[n]*s[n]+b*s[n-1]:a*s[n-1]*s[n-1]+b*s[n]);}else if(a>0&&b<0){sort(s+1,s+n+1);if(abs(s[1])>s[n])printf("%lld\n",a*s[1]*s[1]+b*s[2]>a*s[n]*s[n]+b*s[1]?a*s[1]*s[1]+b*s[2]:a*s[n]*s[n]+b*s[1]);elseprintf("%lld\n",a*s[n]*s[n]+b*s[1]);}else if(a<0&&b>0){sort(s+1,s+n+1);int mm=s[n];int nn=s[n-1];for(i=1;i<=n;i++)s[i]=abs(s[i]);sort(s+1,s+n+1);if(mm!=s[1])printf("%lld\n",a*s[1]*s[1]+b*mm);elseprintf("%lld\n",a*mm*mm+b*nn>a*s[2]*s[2]+b*mm?a*mm*mm+b*nn:a*s[2]*s[2]+b*mm);}else {sort(s+1,s+n+1);int mm=s[1];int nn=s[2];for(i=1;i<=n;i++)s[i]=abs(s[i]);sort(s+1,s+n+1);if(mm!=s[1])printf("%lld\n",a*s[1]*s[1]+b*mm);elseprintf("%lld\n",a*mm*mm+b*nn>a*nn*nn+b*mm?a*mm*mm+b*nn:a*nn*nn+b*mm);}}return 0;}
//要考虑s的最小绝对值与s的最大值相等或为同一个数时的情况。(在这块错了6次)#include<stdio.h>#include<string.h>#include<math.h>#include<algorithm>using namespace std;#define INF 0x3f3f3f3fint s[3000100];int c[1000100];int main(){int t;int i,j,k,n,a,b;int cnt=1;long long int sum,mm;scanf("%d",&t);while(t--){memset(c,0,sizeof(c));sum=0;scanf("%d%d%d",&n,&a,&b);for(i=1;i<=n;i++)scanf("%d",&s[i]);printf("Case #%d: ",cnt++);if(a>0){mm=-INF;for(i=1;i<=n;i++){if(abs(s[i])>mm){k=i;mm=abs(s[i]);}}c[k]=1;sum+=a*mm*mm;}else{if(a<0){mm=INF;for(i=1;i<=n;i++){if(abs(s[i])<mm){k=i;mm=abs(s[i]);}}c[k]=1;sum+=a*mm*mm;}}if(b>0){mm=-INF;for(i=1;i<=n;i++){if(s[i]>mm&&!c[i]){mm=s[i];}}sum+=b*mm;}else{if(b<0){mm=INF;for(i=1;i<=n;i++){if(s[i]<mm&&!c[i]){mm=s[i];}}sum+=b*mm;}}printf("%lld\n",sum);}}//这是刚开始写的,错了6次#include<stdio.h>#include<string.h>#include<math.h>#include<algorithm>using namespace std;int s[5000100];int main(){int t,cnt=1;int n,a,b,i,j;scanf("%d",&t);while(t--){scanf("%d%d%d",&n,&a,&b);for(i=1;i<=n;i++)scanf("%d",&s[i]);printf("Case #%d: ",cnt++);if(a>=0&&b>=0){sort(s+1,s+n+1);if(abs(s[1])>s[n])printf("%lld\n",a*s[1]*s[1]+b*s[n]);elseprintf("%lld\n",a*s[n]*s[n]+b*s[n-1]>a*s[n-1]*s[n-1]+b*s[n]?a*s[n]*s[n]+b*s[n-1]:a*s[n-1]*s[n-1]+b*s[n]);}else if(a>0&&b<0){sort(s+1,s+n+1);if(abs(s[1])>s[n])printf("%lld\n",a*s[1]*s[1]+b*s[2]>a*s[n]*s[n]+b*s[1]?a*s[1]*s[1]+b*s[2]:a*s[n]*s[n]+b*s[1]);elseprintf("%lld\n",a*s[n]*s[n]+b*s[1]);}else if(a<0&&b>0){sort(s+1,s+n+1);int mm=s[n];int nn=s[n-1];for(i=1;i<=n;i++)s[i]=abs(s[i]);sort(s+1,s+n+1);if(mm!=s[1])printf("%lld\n",a*s[1]*s[1]+b*mm);elseprintf("%lld\n",a*mm*mm+b*nn>a*s[2]*s[2]+b*mm?a*mm*mm+b*nn:a*s[2]*s[2]+b*mm);}else {sort(s+1,s+n+1);int mm=s[1];int nn=s[2];for(i=1;i<=n;i++)s[i]=abs(s[i]);sort(s+1,s+n+1);if(mm!=s[1])printf("%lld\n",a*s[1]*s[1]+b*mm);elseprintf("%lld\n",a*mm*mm+b*nn>a*nn*nn+b*mm?a*mm*mm+b*nn:a*nn*nn+b*mm);}}return 0;}
- Largest Point hdoj 5461 (逻辑+分情况考虑)好题
- hdoj-5461-Largest Point
- hdoj 5461 Largest Point 【枚举所有情况 找最大值】
- HDOJ 5461 Largest Point(沈阳网络赛)
- hdoj Average 5353 (递推&&数学情况考虑) 好题
- HDOJ 5461.Largest Point(贪心)
- HDU 5461 Largest Point (水)
- hdu 5461 Largest Point(杂题)
- HDU 5461 Largest Point(水)
- hdu 5461 Largest Point
- HDU 5461 Largest Point
- hdu 5461 Largest Point
- HDU 5461Largest Point
- HDU-5461 Largest Point
- hdu 5461 Largest Point
- HDU 5461:Largest Point
- hdu 5461 Largest Point
- HDU 5461 Largest Point
- 【IOS学习笔记】UITableView点击后取消默认选择背景色
- Android所有对话框_dialog大全
- iOS-Core-Animation-Advanced-Techniques(四-2)
- poj2531(trie + 欧拉路径判定)
- Interface Builder 和UIController的联系
- Largest Point hdoj 5461 (逻辑+分情况考虑)好题
- CSS3的学习
- Scraping Data Table from Website by R
- 拆分字符串
- linux面试题
- scanf函数的用法
- 山西研究
- 杭电1284 钱币兑换问题(完全背包)
- hdu4430 Yukari's Birthday 2012 ACM_ICPC Asia ChangChun Regional Contest problem K