zoukankan      html  css  js  c++  java
  • hdu 5461 Largest Point

    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
     数据范围不大,直接暴力求解
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <stack>
    #include <queue>
    #include <map>
    #include <set>
    #include <vector>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    const double eps = 1e-6;
    const double pi = acos(-1.0);
    const int INF = 0x3f3f3f3f;
    const int MOD = 1000000007;
    #define ll long long
    #define CL(a) memset(a,0,sizeof(a))
    int T;
    ll n,a,b;
    ll t[1000010];
    ll min1,min2,max1,max2,k;//分别存最小的数、第二小的数、最大的数、第二大的数和最接近0的数
    
    int main ()
    {
        scanf ("%d",&T);
        int d= 1;
        while(T--)
        {
            scanf ("%lld%lld%lld",&n,&a,&b);
            k=INF;
            for (int i=0; i<n; i++)
                scanf ("%lld",&t[i]);
    
            printf("Case #%d: ",d++);
            sort(t, t+n);
            for (int i=0; i<n; i++)
            {
                if (t[i]<=0&&t[i+1]>=0)
                    k=min(-t[i], t[i+1]);
            }
            min1=t[0];
            min2=t[1];
            max1=t[n-1];
            max2=t[n-2];//找出这五个数
    
            if (a<0&&b<0)//然后就是苦逼的找最大解了,注意负数的平方为正数
                printf ("%lld
    ",a*k*k+b*min1);
    
            else if (a<0&&b>0)
                printf ("%lld
    ",a*k*k+b*max1);
    
            else if (a>0&&b<0)
                printf ("%lld
    ",max(max(a*max1*max1+b*min1, a*min1*min1+b*min2), a*min2*min2+b*min1));
    
            else if (a>0&&b>0)
                printf ("%lld
    ",max(max(a*max1*max1+b*max2, a*max2*max2+b*max1), a*min1*min1+b*max1));
    
            else printf ("0
    ");
        }
        return 0;
    }
     
     
  • 相关阅读:
    Python基础知识(八)—字典
    Python基础知识(七)—元组
    Python基础知识(六)—关于列表深拷贝和浅拷贝及内存图
    Python基础知识(六)—列表
    Python基础知识(五)—字符串
    4、FTP、SSH协议简单介绍
    3、apt-get install xxx时,报错信信息: Could not get lock /var/lib/dpkg/lock-frontend
    2、NFS挂载根文件系统失败:Root-NFS: Unable to get mountd port number from server, using default
    EXPORT_SYMBOL是什么?
    用maven建立一个工程2
  • 原文地址:https://www.cnblogs.com/biu-biu-biu-/p/5761780.html
Copyright © 2011-2022 走看看