码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces:Diverse Permutation(找规律)

时间:2014-11-02 18:20:37      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   ar   os   java   for   

***********************************声明*******************************

      原创作品,出自 “晓风残月xj” 博客,欢迎转载,转载时请务必注明出处(http://blog.csdn.net/xiaofengcanyuexj)。

      由于各种原因,可能存在诸多不足,欢迎斧正!

 *******************************************************************

time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Permutationp is an ordered set of integers p1,???p2,???...,???pn, consisting ofn distinct positive integers not larger thann. We‘ll denote as n the length of permutation p1,???p2,???...,???pn.

Your task is to find such permutationp of length n, that the group of numbers|p1?-?p2|,?|p2?-?p3|,?...,?|pn?-?1?-?pn| has exactly k distinct elements.

Input

The single line of the input contains two space-separated positive integersn, k (1?≤?k?<?n?≤?105).

Output

Print n integers forming the permutation. If there are multiple answers, print any of them.

Sample test(s)
Input
3 2
Output
1 3 2
Input
3 1
Output
1 2 3
Input
5 2
Output
1 3 2 4 5
Note

By |x| we denote the absolute value of numberx.


题解:

     本题要求给定1到n的序列,满足相邻两项之差的绝对值不相同的个数为k。由于给定的1?≤?k?<?n?≤?10范围较大,所以只能寻找时间复杂度为O(n)的算法。可以想到该序列最多有n-1个不同的相邻差(绝对值),其中一个满足条件的序列是:n,1,n-1,2,n-3,3…………。可以尝试构造满足条件的前k-1,然后后面的顺序填写。

Java源代码:

 

import java.util.Scanner;

public class Main {

	private int k, n;

	public Main(int tn, int tk) {
		n = tn;
		k = tk;
	}

	public void printMain() {
		boolean flag = true;
		int count = k - 1;
		int i = 1;
		while (count > 0) {
			if (count != k - 1) {
				--count;
				if (count <= 0) {
					flag = false;
					break;
				}
				System.out.print(" ");
			}

			System.out.print(i);
			System.out.print(" " + (n - i + 1));
			++i;
			--count;
		}
		int j = n - i + 1;
		if (count != k - 1 && i <= j)
			System.out.print(" ");
		if (flag) {
			while (i <= j) {
				System.out.print(j);
				--j;
				if (i <= j)
					System.out.print(" ");
			}
		} else {
			while (i <= j) {
				System.out.print(i);
				++i;
				if (i <= j)
					System.out.print(" ");
			}
		}
		System.out.println();
	}

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		while (input.hasNext()) {
			int tn = input.nextInt();
			int tk = input.nextInt();
			Main AC = new Main(tn, tk);
			AC.printMain();
		}
		input.close();
	}
}
    

       由于时间和水平的原因,难免有不足的地方,欢迎斧正!



Codeforces:Diverse Permutation(找规律)

标签:style   blog   http   io   color   ar   os   java   for   

原文地址:http://blog.csdn.net/xiaofengcanyuexj/article/details/40711207

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!