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$
};


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值