SRM 499 250pt
2012-07-28 17:34 javaspring 阅读(184) 评论(0) 编辑 收藏 举报题意:就是给你一些数,这些数中其中有两个数是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$ };