SRM 499 250pt

来源:互联网 发布:站长交易第一平台源码 编辑:程序博客网 时间:2024/04/18 17:58

题意:就是给你一些数,这些数中其中有两个数是x+y的值和x-y的值,求使x*y的最大值。

思路:当两个数的和一定时,若要使x*y得值越大,则x和y越接近越好,即x-y得差越小越好。因此,我们可以先对元素进行排序,然后用后面的元素作为和,前面的元素作为差即可,并且进行比较,最后取最大值即可。

代码:

class SimpleGuess{        public:        int getMaximum(vector <int> hints)        {            int i,j,k;int num[105];int len = hints.size();for(i = 0;i < len;++i)num[i] = hints[i];sort(num,num+len);int ans = 0,mmax = 0;bool flag = 0;for(i = len-1;i >= 0; --i){j = 0;while(1){  if(j >= len)break;      int x = (num[i] + num[j])%2;      if(x){        j++;      }  else{    x = (num[i] + num[j])/2;int y = num[i] - x;ans = x*y;if(ans > mmax) mmax = ans;flag = 1;break;  }}}return mmax;        }       // $TESTCODE$};