Largest Point

Time Limit: 1 Sec

Memory Limit: 256 MB

题目连接

http://acm.hdu.edu.cn/showproblem.php?pid=5461

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

HINT

题意

给你a,b,再给你n个数

然后让你求ati*ti+btj最大值是多少

题解:

我们是暴力做的,找到最大的两个数,最小的两个数,绝对值最大的两个数,绝对值最小的两个数

然后扔进一个vector里面,然后去重,然后暴力枚举的

但是还是怕tle,就分治了一下解法,数据小的话就直接n^2暴力枚举= =

代码:

  1. #include <iostream>
  2. #include <cstring>
  3. #include <cstdio>
  4. #include <algorithm>
  5. #include <cmath>
  6. #include <vector>
  7. #include <stack>
  8. #include <map>
  9. #include <set>
  10. #include <queue>
  11. #include <iomanip>
  12. #include <string>
  13. #include <ctime>
  14. #include <list>
  15. #include <bitset>
  16. typedef unsigned char byte;
  17. #define pb push_back
  18. #define input_fast std::ios::sync_with_stdio(false);std::cin.tie(0)
  19. #define local freopen("in.txt","r",stdin)
  20. #define pi acos(-1)
  21.  
  22. using namespace std;
  23. const int maxn = 5e6 + ;
  24. long long a , b , ans , p[maxn];
  25. int vis[] , used[maxn] , n , sz;
  26. vector<long long>s;
  27.  
  28. struct data
  29. {
  30. long long val;
  31. int idx;
  32. };
  33.  
  34. data A[maxn] , B[maxn];
  35.  
  36. bool cmp1(const data & x,const data & y)
  37. {
  38. return x.val < y.val;
  39. }
  40.  
  41. bool cmp2(const data & x,const data & y)
  42. {
  43. return abs(x.val) < abs(y.val);
  44. }
  45.  
  46. void initiation()
  47. {
  48. scanf("%d%I64d%I64d",&n,&a,&b);
  49. memset(used,,sizeof(int)*(n+));
  50. for(int i = ; i < n ; ++ i)
  51. {
  52. scanf("%I64d",&A[i].val);
  53. A[i].idx = i;
  54. B[i].val = A[i].val;
  55. B[i].idx = i;
  56. p[i] = A[i].val;
  57. }
  58. s.clear();
  59. ans = -(1LL<<);
  60. }
  61.  
  62. void dfs(int cur , long long check)
  63. {
  64. if(cur == ) ans = max( ans , check);
  65. else
  66. {
  67. for(int i = ; i < sz ; ++ i)
  68. {
  69. if(!vis[i])
  70. {
  71. vis[i] = ;
  72. if(cur == ) dfs(cur + , check + a * s[i]*s[i] );
  73. else dfs(cur + , check + b*s[i]);
  74. vis[i] = ;
  75. }
  76. }
  77. }
  78. }
  79.  
  80. long long solve()
  81. {
  82. sort(A,A+n,cmp1);
  83. sort(B,B+n,cmp2);
  84. used[A[].idx] = , used[A[].idx] = , used[A[n-].idx] = , used[A[n-].idx] = ;
  85. used[B[].idx] = , used[B[].idx] = ; used[B[n-].idx] = , used[B[n-].idx] = ;
  86. for(int i = ; i < n ; ++ i) if(used[i]) s.push_back(p[i]);
  87. sz = s.size();
  88. memset(vis,,sizeof(vis));
  89. dfs(,);
  90. return ans;
  91. }
  92.  
  93. long long solve2()
  94. {
  95. for(int i=;i<n;i++)
  96. {
  97. for(int j=;j<n;j++)
  98. {
  99. if(i==j) continue;
  100. ans = max(ans,A[i].val*A[i].val*a+b*A[j].val);
  101. }
  102. }
  103. return ans;
  104. }
  105.  
  106. int main(int argc,char *argv[])
  107. {
  108. int Case;
  109. scanf("%d",&Case);
  110. for(int cas = ; cas <= Case ; ++ cas)
  111. {
  112. initiation();
  113. printf("Case #%d: ",cas);
  114. if(n<=) printf("%I64d\n",solve2());
  115. else printf("%I64d\n",solve());
  116. }
  117. return ;
  118. }

hdu 5461 Largest Point 暴力的更多相关文章

  1. hdu 5461 Largest Point

    Thinking about it: 对于式子 a * ti * ti + b * tj,可以看作时有两部分构成 a * ti * ti 和 b * tj,如果整个式子要最大,则要求这两部分都要尽量大 ...

  2. hdu 5461(2015沈阳网赛 简单暴力) Largest Point

    题目;http://acm.hdu.edu.cn/showproblem.php?pid=5461 题意就是在数组中找出a*t[i]*t[i]+b*t[j]的最大值,特别注意的是这里i和i不能相等,想 ...

  3. HDU 5461:Largest Point

    Largest Point Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) To ...

  4. hdoj 5461 Largest Point

    Largest Point Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tot ...

  5. HDU 1506 Largest Rectangle in a Histogram (dp左右处理边界的矩形问题)

    E - Largest Rectangle in a Histogram Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format: ...

  6. HDU 1506 Largest Rectangle in a Histogram set+二分

    Largest Rectangle in a Histogram Problem Description: A histogram is a polygon composed of a sequenc ...

  7. hdu 5762 Teacher Bo 暴力

    Teacher Bo 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5762 Description Teacher BoBo is a geogra ...

  8. HDU 1333 基础数论 暴力

    定义一种数位simth数,该数的各位之和等于其所有质因子所有位数字之和,现给出n求大于n的最小该种数,n最大不超过8位,那么直接暴力就可以了. /** @Date : 2017-09-08 14:12 ...

  9. HDU 4618 Palindrome Sub-Array 暴力

    Palindrome Sub-Array 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4618 Description A palindrome s ...

随机推荐

  1. textview的上下滑动效果

    1.xml文件中 <TextView    …    android:scrollbars="vertical"  ../> 2.java文件中 textview.se ...

  2. 在.net中用Connection对象数据源的架构信息

    可得到数据库中的,表,视图,等信息   string strcon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + fi ...

  3. [Everyday Mathematics]20150101

    (1). 设 $f(x),g(x)$ 在 $[a,b]$ 上同时单调递增或单调递减, 试证: \[ (b-a)\int_a^b f(x)g(x)\mathrm{\,d}x \geq \int_a^b ...

  4. HDU 3271-SNIBB(数位dp)

    题意:给一个数q, q=1时求给定区间,给定进制,各数位和等于m的数字的个数 q=2时求给定区间,给定进制,各数位和等于m的数字中的第k大的数字 分析:dp[i][sum][j],表示长度为i当前数位 ...

  5. java创建对象的四种方式

    1.最常见的 new 一个 2使用反射机制创建对象,直接调用非构造函数 Class obj=Class.forName("A"); A a=obj.newInstance(); C ...

  6. Jquery UI的datepicker插件使用方法

    原文链接;http://www.ido321.com/375.html Jquery UI是一个非常丰富的Jquery插件,并且UI的各部分插件可以独自分离出来使用,这是其他很多Jquery插件没有的 ...

  7. NOIP2009 靶形数独

    4.靶形数独 (sudoku.pas/c/cpp) [问题描述] 小城和小华都是热爱数学的好学生, 近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了, ...

  8. POJ 1113&&HDU 1348

    题意:凸包周长+一个完整的圆周长.因为走一圈,经过拐点时,所形成的扇形的内角和是360度,故一个完整的圆. 模板题,之前写的Graham模板不对,WR了很多发....POJ上的AC代码 #includ ...

  9. 字符串旋转(str.find()---KMP)

    此题旋转带有技巧性,问题转化为常见的问题,熟练STL可以直接用str.find()函数,其是主要想用KMP算法实现字符串的查找算法... //如果对于一个字符串A,将A的前面任意一部分挪到后边去形成的 ...

  10. 命令rm

    mv -r 递归删除文件夹内所有东西mv -i 交互式删除mv -f 强制删除,没有警告提示