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

来源:互联网 发布:物流软件制作 编辑:程序博客网 时间:2024/06/05 00:58

这道题因为多写了几行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 5461using 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;}



0 0
原创粉丝点击