SRM 499 250pt

题意:就是给你一些数,这些数中其中有两个数是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$
};


你可能感兴趣的:(vector,Class)