zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 10——B. z-sort

    B. z-sort
    time limit per test
    1 second
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    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:

    1. ai ≥ ai - 1 for all even i,
    2. 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’t z-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

    题意:给定一个数组是否能组成一个波动序列(这名称很贴切呃)。然后突然想到了双端队列,然后又想到了据说在两端操作时间很快的list类

    代码:

    #include<iostream>
    #include<algorithm>
    #include<cstdlib>
    #include<sstream>
    #include<cstring>
    #include<cstdio>
    #include<string>
    #include<deque>
    #include<cmath>
    #include<queue>
    #include<set>
    #include<map>
    #include<list>
    using namespace std;
    int pos[1009];
    int main(void)
    {
    	list<int>lst;
    	int n,temp,i;
    	while (cin>>n)
    	{
    		lst.clear();
    		memset(pos,0,sizeof(pos));
    		int cnt=0;
    		for (i=0; i<n; i++)
    		{
    			cin>>temp;
    			lst.push_back(temp);
    		}
    		lst.sort();//list的sort是自带的方法.不能用普通sort
    		bool ok=1;
    		while (!lst.empty())//从一个排好序的序列里头与尾交替地取出一个数就可以组成波动序列
    		{
    			if(lst.front()<=lst.back())
    			{
    				pos[cnt++]=lst.front();
    				lst.pop_front();
    				if(lst.empty())//每次pop都特判一下
    					break;				
    				pos[cnt++]=lst.back();
    				lst.pop_back();
    				if(lst.empty())//每次pop都特判一下
    					break;								
    			}
    			else
    			{
    				ok=0;
    				break;
    			}
    		}
    		if(!ok)
    			cout<<"Impossible"<<endl;
    		else
    		{
    			for (i=0; i<cnt; i++)
    			{
    				printf("%d%s",pos[i],i==cnt-1?"
    ":" ");
    			}
    			cout<<endl;
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    fedora如何删除某个包且不删除依赖它的相关包
    git分支切换时的时间戳问题
    [Centos] ERROR: Could not find useradd in chroot, maybe the install failed?
    linux通过python设置系统默认编码
    linux设置系统时间和时区
    python: "TypeError: 'type' object is not subscriptable"
    如何搭建http服务仓库
    [转载]RPM中SPEC常用路径以及宏变量
    spec文件写作规范
    GeoServer中利用SLD配图之矢量图层配图
  • 原文地址:https://www.cnblogs.com/Blackops/p/5356387.html
Copyright © 2011-2022 走看看