网易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;
}


查看20道真题和解析