A student of z-school found a kind of sorting called z-sort. The array a with n elements are z-sorted if two conditions hold:
For example the arrays [1,2,1,2] and [1,1,1,1] are z-sorted while the array [1,2,3,4] isn’t z-sorted.
Can you make the array z-sorted?
The first line contains a single integer n (1 ≤ n ≤ 1000) — the number of elements in the array a.
The second line contains n integers ai (1 ≤ ai ≤ 109) — the elements of the array a.
If it's possible to make the array a z-sorted print n space separated integers ai — the elements after z-sort. Otherwise print the only word "Impossible".
4 1 2 2 1
1 2 1 2
5 1 3 2 2 5
1 5 2 3 2
#include<stdio.h> #include<iostream> #include<string.h> #include<string> #include<ctype.h> #include<math.h> #include<set> #include<map> #include<vector> #include<queue> #include<bitset> #include<algorithm> #include<time.h> using namespace std; void fre() { freopen("c://test//input.in", "r", stdin); freopen("c://test//output.out", "w", stdout); } #define MS(x,y) memset(x,y,sizeof(x)) #define MC(x,y) memcpy(x,y,sizeof(x)) #define MP(x,y) make_pair(x,y) #define ls o<<1 #define rs o<<1|1 typedef long long LL; typedef unsigned long long UL; typedef unsigned int UI; template <class T1, class T2>inline void gmax(T1 &a, T2 b) { if (b>a)a = b; } template <class T1, class T2>inline void gmin(T1 &a, T2 b) { if (b<a)a = b; } const int N = 1010, M = 0, Z = 1e9 + 7, ms63 = 0x3f3f3f3f; int n; int a[N], b[N]; int main() { while (~scanf("%d", &n)) { for (int i = 1; i <= n; ++i)scanf("%d", &a[i]); sort(a + 1, a + n + 1); int p = 1; for (int i = 1; i <= n; i += 2)b[i] = a[p++]; for (int i = 2; i <= n; i += 2)b[i] = a[p++]; for (int i = 1; i <= n; ++i)printf("%d ", b[i]); puts(""); } return 0; } /* 【trick&&吐槽】 不会出现impossible的哦 【题意】 给你一个长度为n(1000)的数列,每个数值可能为[1,1e9]之间。 问你我们能否使得数列重组变为一个奇小偶大的数列 【类型】 脑洞 【分析】 奇数位<=前后的偶数位? 奇数位<=全部的偶数位即可。 排序,放置 【时间复杂度&&优化】 O(nlogn) */