Permutation p is an ordered set of integers p1, p2, ..., pn, consisting of n distinct positive integers not larger than n. We'll denote as nthe length of permutation p1, p2, ..., pn.
Your task is to find such permutation p of length n, 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 integers n, 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 number x.
题解:这一题就是简单构造,1,n-1,2……构造k个不同的差就可以了。
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int n,k;
int main()
{
scanf("%d%d",&n,&k);
//build
if (k==1)
{
for (int i=1;i<=n;i++) printf("%d ",i);
return 0;
}
else
{
int last=1,t=n,f=1,p=1;
printf("%d ",last);
while (k!=1)
{
last=last+(--t)*f;
f=f*(-1);
printf("%d ",last);
p++; k--;
}
if (f>=0) for (int i=p-p/2+1;i<=n-p/2;i++) printf("%d ",i);
else for (int i=n-p/2;i>=p-p/2+1;i--) printf("%d ",i);
}
return 0;
}