zoukankan      html  css  js  c++  java
  • codeforces 652B 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’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("
    ");
    		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("
    ");
    	} 
    	return 0;
    }
     
    

      



  • 相关阅读:
    【Unity】自定义编辑器窗口——拓展编辑器功能
    【Unity】AssetBundle的使用——打包/解包
    【Unity】使用Resources类管理资源
    【Unity】使用AssetDatabase编辑器资源管理
    【Unity】协程Coroutine及Yield常见用法
    【Unity】制作简易定时器(Timer)
    python3使用csv模块读写csv文件
    Python3使用csv模块csv.writer().writerow()保存csv文件,产生空行的问题
    MongoDB服务无法启动,发生服务特定错误:100
    ValueError: update only works with $ operators
  • 原文地址:https://www.cnblogs.com/tonghao/p/5333052.html
Copyright © 2011-2022 走看看