tyvj1294 小v的舞会

背景

"梦中伊人,断我男儿几寸柔肠,于断桥,不知西风自憔悴那姑娘。"小v的梦中伊人要带领一大帮姐妹MM们来小v家举办舞会,然而怎么安排跳舞的顺序成了大问题,你能帮他么?

描述

有n个MM要站成若干个圈来跳华尔兹,而每个MM都有一个漂亮值Si,跳舞时第i个MM所表现出来的漂亮值为:该MM的漂亮值与其后面MM的漂亮值之差的绝对值(规定顺时针方向为向后),如果某个MM单独站成一个圈(假设能站成),则其漂亮值为0,你的任务是找出这个最大能表现出的漂亮值。

输入格式

第一行一个整数n,表示n个MM
第二行n个整数,第i个整数表示第i个MM的漂亮值

输出格式

一行一个整数,表示能表现出的最大漂亮值

测试样例1

输入


12 11 24 17 12 24 

输出

60

备注

数据范围:
对于10%的数据,0<n<=10,0<Si<=100
对于40%的数据,0<n<=50,0< Si <=1000
对于100%的数据,0<n<=300,0<Si<=1000000
结果保证不大于2^31.
//贪心,取两头,怎么证明我不懂
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
ll n,a[10005],b[10005],sum;
int main(){
    cin>>n;
    for(int i = 1;i <= n;i++) scanf("%lld",&a[i]);
    sort(a+1,a+1+n);
    int l = 1,r = n,opt = 0;
    for(int i = 1;i <= n;i++){
        if(!opt) b[i] = a[l++];
        else b[i] = a[r--];
        opt ^= 1;
    }
    b[0] = b[n];
    for(int i = 1;i <= n;i++){
        if(b[i] > b[i-1]) sum += b[i] - b[i-1];
        else sum += b[i-1] - b[i];
    }
    cout<<sum;
    return 0;
}

 

posted @ 2016-08-20 22:39  ACforever  阅读(240)  评论(0编辑  收藏  举报