站外求助
  • 板块灌水区
  • 楼主Mercedes_AMG
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/1 23:42
  • 上次更新2024/3/2 10:50:06
查看原帖
站外求助
1044345
Mercedes_AMG楼主2024/3/1 23:42

题目

E. 找朋友

描述

幼儿园老师带领小朋友们在操场玩“找朋友”的游戏。他让N个小朋友沿着一条直线站成一排,每个小朋友站的位置距离左侧起点的距离为Ai。在老师宣布允许他们开始“找朋友”之后,小朋友们可以向左或者向右去找另一个小朋友,或者站着不动,等着另外的小朋友来找他。一段时间后,所有小朋友都找到了“好朋友”(当然,也有可能仅剩一个小朋友没有找到朋友)。

在几轮游戏过后,老师想到了一个问题:在所有小朋友尽可能都找到朋友后(最多允许一个小朋友没找到朋友),小朋友们沿直线移动的距离总和最小值会是多少?

输入

第一行一个正整数N;

第二行N个正整数A1,A2,...,AN,表示从左往右每个小朋友所在位置与左侧起点的距离。

输出

一个整数,表示答案

样例

A组

cin:

3 1 5 8

cout:

3

B组

cin:

4 1 3 5 8

cout:

5

C组

cin:

5 1 2 4 7 8

cout:

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;
}
解答错误,60分
2024/3/1 23:42
加载中...