首页 > 代码库 > Codeforces:Diverse Permutation(找规律)
Codeforces:Diverse Permutation(找规律)
***********************************声明*******************************
原创作品,出自 “晓风残月xj” 博客,欢迎转载,转载时请务必注明出处(http://blog.csdn.net/xiaofengcanyuexj)。
由于各种原因,可能存在诸多不足,欢迎斧正!
*******************************************************************
time limit per testPermutationp is an ordered set of integersp1,???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 lengthn, that the group of numbers|p1?-?p2|,?|p2?-?p3|,?...,?|pn?-?1?-?pn| has exactly k distinct elements.
The single line of the input contains two space-separated positive integersn,k (1?≤?k?<?n?≤?105).
Print n integers forming the permutation. If there are multiple answers, print any of them.
3 2
1 3 2
3 1
1 2 3
5 2
1 3 2 4 5
By |x| we denote the absolute value of numberx.
题解:
本题要求给定1到n的序列,满足相邻两项之差的绝对值不相同的个数为k。由于给定的1?≤?k?<?n?≤?105 范围较大,所以只能寻找时间复杂度为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(找规律)