博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces554D:Kyoya and Permutation
阅读量:7220 次
发布时间:2019-06-29

本文共 3498 字,大约阅读时间需要 11 分钟。

Let's define the permutation of length n as an array p = [p1, p2, ..., pn] consisting of n distinct integers from range from 1 to n. We say that this permutation maps value 1 into the value p1, value 2 into the value p2 and so on.

Kyota Ootori has just learned about cyclic representation of a permutation. A cycle is a sequence of numbers such that each element of this sequence is being mapped into the next element of this sequence (and the last element of the cycle is being mapped into the first element of the cycle). The cyclic representation is a representation of p as a collection of cycles forming p. For example, permutationp = [4, 1, 6, 2, 5, 3] has a cyclic representation that looks like (142)(36)(5) because 1 is replaced by 4, 4 is replaced by 2, 2 is replaced by 1, 3 and 6 are swapped, and 5 remains in place.

Permutation may have several cyclic representations, so Kyoya defines the standard cyclic representation of a permutation as follows. First, reorder the elements within each cycle so the largest element is first. Then, reorder all of the cycles so they are sorted by their first element. For our example above, the standard cyclic representation of [4, 1, 6, 2, 5, 3] is (421)(5)(63).

Now, Kyoya notices that if we drop the parenthesis in the standard cyclic representation, we get another permutation! For instance,[4, 1, 6, 2, 5, 3] will become [4, 2, 1, 5, 6, 3].

Kyoya notices that some permutations don't change after applying operation described above at all. He wrote all permutations of length nthat do not change in a list in lexicographic order. Unfortunately, his friend Tamaki Suoh lost this list. Kyoya wishes to reproduce the list and he needs your help. Given the integers n and k, print the permutation that was k-th on Kyoya's list.

Input

The first line will contain two integers nk (1 ≤ n ≤ 501 ≤ k ≤ min{1018, l} where l is the length of the Kyoya's list).

Output

Print n space-separated integers, representing the permutation that is the answer for the question.

Sample test(s)
input
4 3
output
1 3 2 4
input
10 1
output
1 2 3 4 5 6 7 8 9 10
Note

The standard cycle representation is (1)(32)(4), which after removing parenthesis gives us the original permutation. The first permutation on the list would be [1, 2, 3, 4], while the second permutation would be [1, 2, 4, 3].

题意:

给出n,k。代表有包括1~n的一个数组。通过对这些数进行一些排列,对于当中的一个序列,第i个位置会指向第a[i]个位置,如此便会形成一些环,将这些环合并成一组。按大到小排序,然后对于形成的多组而言,依照每一组开头数字的大小从小大大排序,形成一个新的序列

而对于这些序列而言,当中有一些序列依照题意的分类排序方法得到的新序列是与本身相等的,如今要求这些序列中的第k个是多少。k不会超过这样的序列的总数

思路:

对于这样的类型的序列,那么必定是交换相邻的两个。并且已经交换过了的是不能再交换了,而当中数量又与斐波那契数有关系

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define lson 2*i#define rson 2*i+1#define LS l,mid,lson#define RS mid+1,r,rson#define UP(i,x,y) for(i=x;i<=y;i++)#define DOWN(i,x,y) for(i=x;i>=y;i--)#define MEM(a,x) memset(a,x,sizeof(a))#define W(a) while(a)#define gcd(a,b) __gcd(a,b)#define LL long long#define N 100005#define INF 0x3f3f3f3f#define EXP 1e-8#define lowbit(x) (x&-x)const int mod = 1e9+7;LL n,k;LL a[55];int main(){ LL i,j; a[0] = a[1] = 1; for(i = 2;i<=50;i++) { a[i] = a[i-1]+a[i-2]; } scanf("%I64d%I64d",&n,&k); LL c1 = 1,c2 = 2; while(n>0) { if(k>a[n-1]) { printf("%I64d %I64d ",c2,c1); k-=a[n-1]; n-=2; c2+=2; c1+=2; } else { printf("%I64d ",c1); n--; c1++; c2++; } } printf("\n"); return 0;}

转载地址:http://nyhym.baihongyu.com/

你可能感兴趣的文章
11月8日云栖精选夜读:如何让测试少加班?阿里Mock平台使用方法揭秘!
查看>>
netty源码分析(一)
查看>>
vue.js 总结
查看>>
深入理解JVM:Java内存模型JMM
查看>>
警惕,大数据已经侵入到你生活的方方面面
查看>>
[python] time 模块 -- 时间显示与程序计时
查看>>
仿QQ聊天工具(Android源码)
查看>>
JMeter做压力测试,先调用第一接口,拿到返回值后去调用第二个接口(入门级)...
查看>>
前嗅ForeSpider脚本教程:基础对象(一)
查看>>
shell命令行下常用快捷键汇总
查看>>
【错误集】之nagios-plugins编译出错
查看>>
电脑文件备份软件
查看>>
php和html混写,遍历出二维关联数组
查看>>
nginx基础应用
查看>>
我的友情链接
查看>>
anrdoid 蓝牙简易发送代码
查看>>
Mac 安装homebrew
查看>>
google io 2014 掠影
查看>>
python socket 服务器和客户端
查看>>
Ext4笔记
查看>>