幼儿园老师带领小朋友们在操场玩“找朋友”的游戏。他让N个小朋友沿着一条直线站成一排,每个小朋友站的位置距离左侧起点的距离为Ai。在老师宣布允许他们开始“找朋友”之后,小朋友们可以向左或者向右去找另一个小朋友,或者站着不动,等着另外的小朋友来找他。一段时间后,所有小朋友都找到了“好朋友”(当然,也有可能仅剩一个小朋友没有找到朋友)。
在几轮游戏过后,老师想到了一个问题:在所有小朋友尽可能都找到朋友后(最多允许一个小朋友没找到朋友),小朋友们沿直线移动的距离总和最小值会是多少?
第一行一个正整数N;
第二行N个正整数A1,A2,...,AN,表示从左往右每个小朋友所在位置与左侧起点的距离。
一个整数,表示答案
3 1 5 8
3
4 1 3 5 8
5
5 1 2 4 7 8
2
#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> a;
int m;
int main()
{
cin>>n;
a.push_back(INT_MAX);
for(int i=1; i<=n; i++) {
int xs;
cin>>xs;
a.push_back(xs);
}
int ss=1;
if(n%2==1) {
m=INT_MIN;
a[0]=INT_MAX;
a[n+1]=INT_MAX;
for(int i=1; i<=n; i++) {
if(m<min(abs(a[i]-a[i-1]),abs(a[i+1]-a[i]))) {
m=max(m,min(abs(a[i]-a[i-1]),abs(a[i+1]-a[i])));
ss=i;
}
}
//cout<<ss<<endl;
a.erase(a.begin()+ss);
m=0;
n--;
for(int i=2; i<=n; i+=2) {
m+=abs(a[i]-a[i-1]);
//cout<<abs(a[i]-a[i-1])<<" "<<a[i]<<" "<<m<<endl;
}
cout<<m;
return 0;
}
m=0;
for(int i=2; i<=n; i+=2) {
m+=abs(a[i]-a[i-1]);
}
cout<<m;
return 0;
}