输入包括两行,第一行一个整数n(1 ≤ n ≤ 50),表示学生的人数 第二行为n个整数h[i](1 ≤ h[i] ≤ 1000),表示每个学生的身高
输出一个整数,表示n个学生列队可以获得的最大的疯狂值。 如样例所示: 当队列排列顺序是: 25-10-40-5-25, 身高差绝对值的总和为15+30+35+20=100。 这是最大的疯狂值了。
5 5 10 25 40 25
100
//用贪心,排序之后用两个下标每次选取最大间隔的值
#include<iostream> #include<algorithm> #include<vector> using namespace std; int main() { int n; scanf("%d", &n); vector<int>p; for(int i = 0; i < n; i++) { int t; scanf("%d", &t); p.push_back(t); } sort(p.begin(), p.end()); int s = 0, e = p.size() - 2; int sum = 0; while(s<=e) { int sf = abs(res.front() - p[s]); int sb = abs(res.back() - p[s]); int ef = abs(res.front() - p[e]); int eb = abs(res.back() - p[e]); if(max(sf, sb) > max(ef, eb)) { if(sf > sb) { s++; sum += sf; } else{ s++; sum += sb; } } else{ if(ef > eb) { e--; sum += ef; } else{ e--; sum += eb; } } } printf("%d", sum); return 0; }