codeforces 482 A. Diverse Permutation(构造)
C - C
**Time Limit:**1000MS **Memory Limit:**262144KB 64bit IO Format:%I64d & %I64u
Submit Status
Description
Permutation_p_ is an ordered set of integers _p_1, p_2, ..., p__n, consisting of n distinct positive integers not larger than n. We'll denote as_n the length of permutation _p_1, _p_2, ..., p__n.
Your task is to find such permutation p of length n, that the group of numbers |_p_1 - _p_2|, |_p_2 - _p_3|, ..., |p__n - 1 - p__n| has exactly k distinct elements.
Input
The single line of the input contains two space-separated positive integers n, k (1 ≤ k < n ≤ 105).
Output
Print n integers forming the permutation. If there are multiple answers, print any of them.
Sample Input
Input
3 2
Output
1 3 2
Input
3 1
Output
1 2 3
Input
5 2
Output
1 3 2 4 5
Hint
By |x| we denote the absolute value of number x.
题意是说找到找到一组n个由1..n组成的数列,且每个数字只出现一次
满足每相邻的两项的差的绝对值一共有k种。
找规律即可。不好描述,直接上代码吧。
1
2 /* ***********************************************
3 Author :111qqz
4 Created Time :2016年02月22日 星期一 23时36分22秒
5 File Name :code/cf/problem/482A.cpp
6 ************************************************ */
7
8 #include <iostream>
9 #include <algorithm>
10 #include <cstring>
11 #include <cstdio>
12 #include <cmath>
13 using namespace std;
14 int n,k;
15 int tmp,p;
16 const int N=1E5+7;
17 int a[N];
18
19 int main()
20 {
21
22 scanf("%d %d",&n,&k);
23 for ( int i = 1; i <= n ; i++ )
24 a[i] = i;
25 tmp = k;
26 p = 1;
27 for ( int i = 2 ; i <= k+1 ; i++)
28 {
29 a[i] = a[i-1] + tmp*p;
30 tmp--;
31 p=p*-1;
32 }
33 for ( int i = 1 ; i < n ; i++ )
34 printf("%d ",a[i]);
35 printf("%d",a[n]);
36
37 return 0;
38 }
39
40