洛谷 P1716 双调序列

题目描述

电脑组的童鞋们经常玩一些智力PK小游戏,某月某日,发源于小朋友又发明了一种新的序列:双调序列,所谓的双调呢主要是满足如下条件描述:

假定有n(n<=1000)个整数(都在longint范围内,即-2147483648~2147483647),双调序列的第一个数是n个整数中的最大数,第二个数是n个整数中的最小数,第三个数是n个数中的第二大数,第四个数是n个数中的第二小数……取过的数不能再取,依次类推,直到结束。

聪明的你听完描述就抿嘴笑了吧?那就请你用程序正确的帮他找出这n个数的双调序列。

输入输出格式

输入格式:

 

第1行为一个整数n。

接下来n行给出了题目中所述的n个整数,每行包含一个整数。

 

输出格式:

 

有n行,每行为一个整数,是满足条件的双调序列

 

输入输出样例

输入样例#1: 复制
5
10
-1
3
3
-9
输出样例#1: 复制
10
-9
3
-1
3

说明

对于100%的数据,n<=1000。

思路:排序

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n;
long long num[1010],ans[1010];
int cmp(long long a,long long b){
    return a>b;
}
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%lld",&num[i]);
    sort(num+1,num+1+n,cmp);
    for(int i=1;i<=n;i+=2){
        int k=(i+1)/2;
        ans[i]=num[k];
        ans[i+1]=num[n-k+1];
    }
    for(int i=1;i<=n;i++)    cout<<ans[i]<<endl;
}

 

posted @ 2017-12-06 21:52  一蓑烟雨任生平  阅读(397)  评论(0编辑  收藏  举报