codeforces 652B z-sort(思维)
B. z-sort
time limit per test
1 secondmemory limit per test
256 megabytesinput
standard inputoutput
standard outputA 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:
- ai ≥ ai - 1 for all even i,
- ai ≤ ai - 1 for all odd i > 1.
For example the arrays [1,2,1,2] and [1,1,1,1] are z-sorted while the array [1,2,3,4] isn’tz-sorted.
Can you make the array z-sorted?
Input
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.
Output
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".
Examples
input
4
1 2 2 1
output
1 2 1 2
input
5
1 3 2 2 5
output
1 5 2 3 2
题意:给你一组数问是否可以进行Z排序 z排序要求:对于奇数位i 满足ai<=ai-1 偶数位i满足ai>=ai-1 可以的话输出排序后的解
题解:因为有等号,所以就简单多了,我们将原数组从小到大排序,然后将后一半大的数放在偶数位即可,显然所有的序列都满足
#include<stdio.h> #include<string.h> #include<queue> #include<cstdio> #include<string> #include<math.h> #include<algorithm> #define LL long long #define PI atan(1.0)*4 #define DD double #define MAX 6000 #define mod 100 #define dian 1.000000011 #define INF 0x3f3f3f using namespace std; int s[MAX]; int a[MAX]; int ans[MAX],op[MAX]; int main() { int n,m,j,i,t,k,o,l; while(scanf("%d",&n)!=EOF) { for(i=1;i<=n;i++) { scanf("%d",&a[i]); //a[i]=s[i]; } sort(a+1,a+n+1); m=n/2; if(n&1) m=m+2; else m=m+1; j=1; for(i=n;i>=m;i--) op[j++]=a[i]; for(i=1;i<m;i++) s[i]=a[i]; //printf("%d* ",a[i]); //printf("\n"); l=o=1; for(i=1;i<=n;i++) { if(i&1) ans[i]=s[l++]; else ans[i]=op[o++]; } for(i=1;i<=n;i++) printf("%d ",ans[i]); printf("\n"); } return 0; }