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.
Examples
input
3 2
output
1 3 2
input
3 1
output
1 2 3
input
5 2
output
1 3 2 4 5
Note
By |x| we denote the absolute value of number x.
Solution:
#include <cstring> #include <vector> #include <list> #include <map> #include <set> #include <deque> #include <stack> #include <bitset> #include <algorithm> #include <functional> #include <numeric> #include <utility> #include <sstream> #include <iostream> #include <iomanip> #include <cstdio> #include <cmath> #include <cstdlib> #include <ctime> #include <memory.h> #include <cassert> using namespace std; int a[1234567]; int main() { int n, k; scanf("%d %d", &n, &k); a[0] = 1; int low = 1, high = 1; for (int i = 1; i <= k; i++) { if (i % 2 == 1) { a[i] = ++high; } else { a[i] = --low; } } for (int i = k + 1; i < n; i++) { if (a[k] == low) { a[i] = a[i - 1] - 1; } else { a[i] = a[i - 1] + 1; } } int smallest = a[0]; for (int i = 1; i < n; i++) { if (a[i] < smallest) { smallest = a[i]; } } for (int i = 0; i < n; i++) { if (i > 0) printf(" "); printf("%d", a[i] - smallest + 1); } printf("\n"); return 0; }
Related posts:
The Brand New Function
Solve RMQ (Range Minimum Query) by finding LCA (Lowest Common Ancestor)
Antipalindrome
Rooks and Rectangles
Declined Finalists
Delivery Club
Power Tree
Game on Tree
New Year and the Factorisation Collaboration
Magic Trick
Extended Euclidean Algorithm
Cowboy Beblop at his computer
Felicity's Big Secret Revealed
Check whether a graph is bipartite
Professor GukiZ and Two Arrays
Flawed Flow
Design Tutorial: Learn from a Game
Long Path
Arbitrary-Precision Arithmetic
Nastya and Scoreboard
Integer factorization
Robbers' watch
Finding articulation points in a graph in $O(N+M)$
Limak and Shooting Points
King of Thieves
Tape
The Great Game
Placing Bishops on a Chessboard
New Year and Permutation
Aztec Catacombs
JYPnation
Feed with Candy