Permutation(构造+思维)
A?permutation?p?is an ordered group of numbers?p1,???p2,???...,???pn, consisting of?ndistinct positive integers, each is no more than?n. We'll define number?n?as the length of permutation?p1,???p2,???...,???pn.
Simon has a positive integer?n?and a non-negative integer?k, such that?2k?≤?n. Help him find permutation?a?of length?2n, such that it meets this equation:?.
Input
The first line contains two integers?n?and?k?(1?≤?n?≤?50000,?0?≤?2k?≤?n).
Output
Print?2n?integers?a1,?a2,?...,?a2n?— the required permutation?a. It is guaranteed that the solution exists. If there are multiple solutions, you can print any of them.
Examples
Input
1 0Output
1 2Input
2 1Output
3 2 1 4Input
4 0Output
2 7 4 6 1 3 5 8Note
Record?|x|?represents the absolute value of number?x.
In the first sample?|1?-?2|?-?|1?-?2|?=?0.
In the second sample?|3?-?2|?+?|1?-?4|?-?|3?-?2?+?1?-?4|?=?1?+?3?-?2?=?2.
In the third sample?|2?-?7|?+?|4?-?6|?+?|1?-?3|?+?|5?-?8|?-?|2?-?7?+?4?-?6?+?1?-?3?+?5?-?8|?=?12?-?12?=?0.
?
題意:找1-n的數,組成
的式子,使得最后的結果為2*k
我們可以來構造數列解決:設前2*k個數對前項比后項多1,2*k到2*n個數前項比后項小1,則式子的結果為
k+(n-k)-|k-(n-k)因為題目中說2*k<=n所以2*k符合題目要求
代碼:
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<queue> #include<stack> #include<vector> #include<map> #include<set> #define MAX 300005 using namespace std;typedef long long ll; int a[MAX]; int main() {int n,k;cin>>n>>k;for(int t=1;t<=2*k;t+=2){a[t]=t;a[t+1]=t+1;}for(int t=2*k+1;t<=2*n;t+=2){a[t]=t+1;a[t+1]=t;}for(int t=1;t<=2*n;t++){cout<<a[t]<<" ";}return 0;}?
轉載于:https://www.cnblogs.com/Staceyacm/p/10781800.html
總結
以上是生活随笔為你收集整理的Permutation(构造+思维)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows server 2008
- 下一篇: java 连接IBM MQ的方法和常见问