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 n the 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 kdistinct 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
给定n和k,即有一个1~n的序列,现在要求找到一个序列,使得所有的 | Pi - Pi+1 | 有 k 种不同
#include <iostream>
#include <cstdio>
#include <vector>
#include <string>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
int main()
{
int i,j,k,t,m,n;
int cnt ;
while(scanf("%d%d",&n,&k)!=EOF){
int l = 1;
int r = n;
if(k%2==0){
if(k==2){
cout<<1<<' ';
for(i=r;i>=2;i--)
cout<<i<<' ';
}
else{
cnt = 0;
int tp = (k%2==0)?k/2:(k-1)/2;
for(;cnt<tp;l++,r--){
cout<<l<<' ';
cout<<r<<' ';
cnt++;
}
for(;l<=r;r--)
cout<<r<<' ';
}
}
else{
cnt = 0;
if(k==1){
for(i=1;i<=n;i++){
cout<<i<<' ';
}
}
else{
cnt =0;
for(;cnt<(k-1)/2;l++,r--){
cout<<l<<' ';
cout<<r<<' ';
cnt++;
}
for(;l<=r;l++){
cout<<l<<' ';
}
}
}
cout<<endl;
}
return 0;
}