您的位置:首页 > 其它

hdu 5461 Largest Point 2015 ACM/ICPC Asia Regional Shenyang Online

2016-06-17 15:54 246 查看
这道题因为多写了几行memset就MLE了==。贪心分别保证at^2最大,b^t次大,at^2次大,b^t最大,最后选择max即可。

#include<iostream>
#include<stdio.h>
#include<cstdio>
#include<stdlib.h>
#include<vector>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<stack>
#include<queue>
#include<ctype.h>
#include<map>
#include<time.h>
//hdu 5461
using namespace std;
const int maxn=5*1e6+50;
int T;
int n;
long long a;
long long b;
//long long arrayt[maxn];
long long suma[maxn];
long long sumb[maxn];
long long compare(long long first[],long long second[])
{
int select=0;
//long long ret=0;
long long ma=first[0];//(long long)maxn * maxn * -1;//
for(int i=0;i<n;i++)
{
//long long tmp=suma[i];
if(ma<first[i])
{
ma=first[i];
select=i;
}
}
//ret=ma;
//ma=second[select==0?1:0];
long long mb=second[select==0?1:0];//(long long)maxn * maxn * -1;
for(int i=0;i<n;i++)
{
if(i==select) continue;
//long long tmp=sumb[i];
if(mb<second[i])
{
mb=second[i];
}
}
//ret+=ma;
return ma+mb;
}
//long long case2()
//{
// int select=0;
// long long ret=0;
// long long ma=sumb[0];
// for(int i=0;i<n;i++)
// {
// //long long tmp=sumb[i];
// if(ma<sumb[i])
// {
// ma=sumb[i];
// select=i;
// }
// }
// ret=ma;
// ma=suma[select==0?1:0];
// for(int i=0;i<n;i++)
// {
// if(i==select) continue;
// //long long tmp=suma[i];
// if(ma<suma[i])
// {
// ma=suma[i];
// }
// }
// ret+=ma;
// return ret;
//}
//long long case1()
//{
// int select=0;
// long long ret=0;
// long long ma=a*arrayt[0]*arrayt[0];
// for(int i=0;i<n;i++)
// {
// long long tmp=a*arrayt[i]*arrayt[i];
// if(ma<tmp)
// {
// ma=tmp;
// select=i;
// }
// }
// ret=ma;
// ma=b*arrayt[select==0?1:0];
// for(int i=0;i<n;i++)
// {
// if(i==select) continue;
// long long tmp=b*arrayt[i];
// if(ma<tmp)
// {
// ma=tmp;
// }
// }
// ret+=ma;
// return ret;
//}
//long long case2()
//{
// int select=0;
// long long ret=0;
// long long ma=b*arrayt[0];
// for(int i=0;i<n;i++)
// {
// long long tmp=b*arrayt[i];
// if(ma<tmp)
// {
// ma=tmp;
// select=i;
// }
// }
// ret=ma;
// ma=a*arrayt[select==0?1:0]*arrayt[select==0?1:0];
// for(int i=0;i<n;i++)
// {
// if(i==select) continue;
// long long tmp=a*arrayt[i]*arrayt[i];
// if(ma<tmp)
// {
// ma=tmp;
// }
// }
// ret+=ma;
// return ret;
//}
int main()
{
freopen("input.txt","r",stdin);
//cin>>T;//
scanf("%d",&T);
for(int ca=1;ca<=T;ca++)
{
//cin>>n>>a>>b;//
scanf("%d %I64d %I64d",&n,&a,&b);
long long t;
//memset(arrayt,0,sizeof(arrayt));
// memset(suma,0,sizeof(suma)); memset lead to MLE
// memset(sumb,0,sizeof(sumb));
for(int i=0;i<n;i++)
{
//scanf("%I64d",&arrayt[i]);
//cin>>t;
scanf("%I64d",&t);
suma[i]=a*t*t;
sumb[i]=b*t;
}
//printf("Case #%d: %I64d\n",ca,max(case1(),case2()));
//cout << "Case #" << ca << ": " << max(way(suma,sumb),way(sumb,suma)) << endl;
printf("Case #%d: %I64d\n",ca,max(compare(suma,sumb),compare(sumb,suma)));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: