Codeforces Round #201 (Div. 2) A. Difference Row
A. Difference Rowtime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard output
You want to arrange n integers a1,?a2,?...,?an in some order in a row. Let's define the value of an arrangement as the sum of differences between all pairs of adjacent integers.
More formally, let's denote some arrangement as a sequence of integers x1,?x2,?...,?xn, where sequence x is a permutation of sequencea. The value of such an arrangement is (x1?-?x2)?+?(x2?-?x3)?+?...?+?(xn?-?1?-?xn).
Find the largest possible value of an arrangement. Then, output the lexicographically smallest sequence x that corresponds to an arrangement of the largest possible value.
InputThe first line of the input contains integer n (2?≤?n?≤?100). The second line contains n space-separated integers a1, a2, ..., an (|ai|?≤?1000).
OutputPrint the required sequence x1,?x2,?...,?xn. Sequence x should be the lexicographically smallest permutation of a that corresponds to an arrangement of the largest possible value.
Sample test(s)input5100 -100 50 0 -50output
100 -50 0 50 -100Note
In the sample test case, the value of the output arrangement is (100?-?(?-?50))?+?((?-?50)?-?0)?+?(0?-?50)?+?(50?-?(?-?100))?=?200. No other arrangement has a larger value, and among all arrangements with the value of 200, the output arrangement is the lexicographically smallest one.
Sequence x1,?x2,?... ,?xp is lexicographically smaller than sequence y1,?y2,?... ,?yp if there exists an integer r (0?≤?r?<?p) such that x1?=?y1,?x2?=?y2,?... ,?xr?=?yr and xr?+?1?<?yr?+?1.
#include <iostream>#include <stdio.h>#include <algorithm>using namespace std;#define M 10500bool cmp(int a,int b){ return a<b;}int pri[M];int main(){ int n,i; while(scanf("%d",&n)!=EOF){ for(i=0;i<n;i++){ scanf("%d",&pri[i]); } sort(pri,pri+n,cmp); printf("%d",pri[n-1]); for(i=1;i<n-1;i++){ printf(" %d",pri[i]); } printf(" %d\n",pri[0]); } return 0;}