版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhaohaibo_/article/details/86654886
题目描述
小a非常喜欢204这个数字,因为′a′+′k′=204。现在他有一个长度为n的序列,其中只含有2,0,4这三种数字设ai为序列中第i个数,你需要重新排列这个数列,使得
最大(公式的含义是:每个数与前一个数差的平方的和)
注意:我们默认
.
输入描述:
第一行一个整数n
接下来一行n个整数,第i个数表示ai
输出描述:
输出一个整数,表示
的最大值
示例1
输入
2
2 4
输出
20
说明
样例1解释:按(4,2)排列是最优的,此时sum=(4−0)2+(2−4)2=20
.
示例2
输入
5
2 4 0 2 4
输出
52
贪心,尽量的把最小的和最大的数放一起
先排序,然后按照 0 n 1 n-1 2 n-2…这种规律放数
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N = 100010;
int a[N], b[N];
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i ++ ) cin >> a[i];
sort(a, a + n + 1);
for (int i = 0, j = 0; j <= n; i ++, j += 2) b[j] = a[i];
for (int i = n, j = 1; j <= n; i --, j += 2) b[j] = a[i];
int res = 0;
for (int i = 1; i <= n; i ++ ) res += (b[i] - b[i-1]) * (b[i] - b[i-1]);
cout << res << endl;
return 0;
}