网易C++ 【疯狂队列最大值】
第一眼以为是DP,其实是有规律的。就是每次挑最大最小的,直到挑完
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int n, i, tmp, p1, p2, v1, v2; cin>>n; if(n == 1) { cout<<0; return 0; } vector<int> a(n, 0); for(i = 0; i < n; i++) { cin>>tmp; a[i] = tmp; } sort(a.begin(), a.end()); p1 = 0; p2 = n - 1; v1 = a[0]; v2 = a[n - 1]; int res = abs(v1 - v2); p1 = 1; p2 = n - 2; for(i = 1; i < n/2; i++) { if(abs(a[p1] - v1) > abs(a[p2] - v1)) { res += abs(a[p1] - v1); res += abs(a[p2] - v2); v1 = a[p1]; v2 = a[p2]; } else { res += abs(a[p1] - v2); res += abs(a[p2] - v1); v1 = a[p2]; v2 = a[p1]; } p1++; p2--; } if(n % 2 == 1) { res += max(a[p1] - v1, a[p1] - v2); } cout<<res; return 0; }