Problem:最大化
Description
给你n个整数,请重新排列这些整数,使得式子的值最大,其中表示第i个整数。请输出S的最大值。
Input:
第一行一个整数n(2 <= n <= 100000),表示数字的个数;
第二行为n个整数 (1 <= ai <= 1000000000)
Output:
输出一个整数,表示S的最大值。
Sample Input:
2
2 1
Sample Output:
1
Note:
Smax = (-1)^2 * (2 – 1) = 1
Language:C++
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
long long n;
while(cin>>n)
{
long long a[100010];
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
long long sum=0;
if(n%2)
{
for(int i=1;i<=(n+1)/2;i++)
sum-=2*a[i];
for(int i=(n+1)/2+1;i<=n;i++)
sum+=2*a[i];
cout<<sum+a[n/2-1]+a[n/2]<<endl;
}
else
{
for(int i=1;i<=n/2;i++)
sum-=2*a[i];
for(int i=n/2+1;i<=n;i++)
sum+=2*a[i];
cout<<sum+a[n/2]-a[n/2+1]<<endl;
}
}
return 0;
}