Codeforces Round#175 (Div.2) 275A

A. Slightly Decreasing Permutations
time limit per test 2 seconds
memory limit per test 256 megabytes
input standard input
output standard output

Permutation p is an ordered set of integers p1,  p2,  ...,  pn, consisting of n distinct positive integers, each of them doesn't exceed n. We'll denote the i-th element of permutation p as pi. We'll call number n the size or the length of permutation p1,  p2,  ...,  pn.

The decreasing coefficient of permutation p1, p2, ..., pn is the number of such i (1 ≤ i < n), that pi > pi + 1.

You have numbers n and k. Your task is to print the permutation of length n with decreasing coefficient k.

Input

The single line contains two space-separated integers: n, k (1 ≤ n ≤ 105, 0 ≤ k < n) — the permutation length and the decreasing coefficient.

Output

In a single line print n space-separated integers: p1, p2, ..., pn — the permutation of length n with decreasing coefficient k.

If there are several permutations that meet this condition, print any of them. It is guaranteed that the permutation with the sought parameters exists.

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

 

 

 
 
 
 
Input
3 0
Output
1 2 3
 
 


 

Input
3 2
Output
3 2 1
 
 
 
 
 
 
题目大意:
对于给定的整数 n 和 k 试求一个排列p,该排列满足一下条件:
(1) 排列中包含n个元素,每个元素满足 1<=p(i)<=n 且互不相同
(2) 排列中满足p(i)>p(i+1), 1<=i<n 的个数为k
 
分析:
1.比较直观的方法是用一个数组存储n个数 然后找满足条件的排列,但是很容易发现,这样的方法很笨,而且很容易超时。
2.通过分析排列的性质,可以找到一个规律:如果把数列{1,2,...,n}的前n-k项不变,后k项倒转,即可满足条件。
3.找到规律后,有两种执行方式:
   (1) 其中一种就是依旧用数组保存相应的数位,然后利用呼唤算法,把数组的后k个元素倒转,最后将数组输出。
   (2) 另一种则是采取比较取巧的方法,不用存储每一个元素,根据数列的性质,可将数列分为两个部分,前n-k个数 和后k个数
        前n-k个数分别就是其序号,后k个数可直接将其倒序输出。
很明显的,后一种方法,避免的存储,而且省掉了排序倒转的操作,可以显得高效,本人的代码如下:
 1 #include <iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int n,k;
 6     cin>>n>>k;
 7     for(int i=1;i<n-k;i++)
 8        cout<<i<<" ";
 9     for(int j=n;j>n-k;j--)
10        cout<<j<<" ";
11     cout<<n-k<<endl;
12     return 0;
13 }

参考codeforces Round#175 : http://www.codeforces.com/contest/285/problem/A

posted @ 2013-03-22 14:24  Double_win  阅读(391)  评论(0编辑  收藏  举报