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;
    }
     
     
  • 相关阅读:
    eos合约案例导读
    eos TODO EOS区块链上EOSJS和scatter开发dApp
    电脑提示‘您需要来自Administration的权限才能对此文件夹进行更改’怎么删除文件
    ubuntu 设置全局代理
    eos开发实践
    eos博客
    如何在Ubuntu 18.04上安装Go
    parity密码
    Nodejs基础之redis
    完全搞懂事件
  • 原文地址:https://www.cnblogs.com/biu-biu-biu-/p/5761780.html
Copyright © 2011-2022 走看看