problem

题意

  • 本题题意不太easy看懂。

    给定一个序列,我们能够把这个序列变成一些循环置换的和。然而这样的置换的方法是不止一种的。我们定义一种standard cyclic representation,即每一个循环置换中最大的数都在第一个。把得到的循环置换的括号去掉。我们能够得到一个新的序列。

    定义一个序列,使得它变成置换后再去掉括号得到的新序列和原序列同样,那么称这样的序列是稳定的。给定一个n(序列长度)和k。要求求出全部稳定序列按字典序排序后的第k大序列。


思路

  • 首先我们能够证明。稳定序列是具有一定性质的。第一。1,2,3...n这样的序列是稳定序列。

    第二,全部的稳定序列都是由1,2,3...n这样的序列经过相邻的数交换得来的。而且每一个数仅仅能被交换一次。

  • 这是由于。稳定的置换中,每一个循环置换的长度不可能超过2。

    由于长度为3的循环置换就已经不可能找出了,故长度大于4的也不可能找出。

  • 有了这个性质,能够推知,对于长度为n的序列,共同拥有fib[n]种稳定序列。
  • 我们对每一位进行推断。假设当前的k<fib[n-i]说明当前位无需发生改变,否则就交换当前位和下一位,而且在k中减去不交换的序列数,即fib[n-i]。最后输出答案就可以。

AC代码

/*written by znl1087*/
#include <bits/stdc++.h>
#define LL long long
using namespace std;
LL fib[51],k;
int n;
int ans[51];
int main()
{
fib[0] = fib[1] = 1LL;
for(int i=2;i<=51;i++)fib[i] = fib[i-1]+fib[i-2];
cin>>n>>k;
k--;
for(int i=1;i<=n;i++)ans[i] = i;
for(int i=1;i<=n;){
if(k < fib[n-i])
i++;
else{
swap(ans[i],ans[i+1]);
k-=fib[n-i];
i+=2;
}
}
for(int i=1;i<=n;i++)cout<<ans[i]<<(i == n? '\n':' ');
return 0;
}

Codeforces 553B Kyoya and Permutation的更多相关文章

  1. codeforces 553B B. Kyoya and Permutation(找规律)

    题目链接: B. Kyoya and Permutation time limit per test 2 seconds memory limit per test 256 megabytes inp ...

  2. Codeforces Round #309 (Div. 1) B. Kyoya and Permutation 构造

    B. Kyoya and Permutation Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/ ...

  3. Codeforces Round #309 (Div. 2) -D. Kyoya and Permutation

    Kyoya and Permutation 这题想了好久才写出来,没看题解写出来的感觉真的好爽啊!!! 题目大意:题意我看了好久才懂,就是给你一个序列,比如[4, 1, 6, 2, 5, 3],第一个 ...

  4. Codeforces A. Kyoya and Colored Balls(分步组合)

    题目描述: Kyoya and Colored Balls time limit per test 2 seconds memory limit per test 256 megabytes inpu ...

  5. [Codeforces 553E]Kyoya and Train(期望DP+Floyd+分治FFT)

    [Codeforces 553E]Kyoya and Train(期望DP+Floyd+分治FFT) 题面 给出一个\(n\)个点\(m\)条边的有向图(可能有环),走每条边需要支付一个价格\(c_i ...

  6. Codeforces554D:Kyoya and Permutation

    Let's define the permutation of length n as an array p = [p1, p2, ..., pn] consisting of n distinct ...

  7. Codeforces 691D Swaps in Permutation

    Time Limit:5000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Prac ...

  8. Codeforces 500B. New Year Permutation[连通性]

    B. New Year Permutation time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  9. codeforces 500B.New Year Permutation 解题报告

    题目链接:http://codeforces.com/problemset/problem/500/B 题目意思:给出一个含有 n 个数的排列:p1, p2, ..., pn-1, pn.紧接着是一个 ...

随机推荐

  1. Oracle基础 06 控制文件 controlfile

    --查看控制文件路径 show parameter control_files; --控制文件的备份,三种方式1)使用OS命令进行拷贝:1)open状态下,使用alter database命令生成控制 ...

  2. JMeter 分布式测试部署

    对于并发量很大的需求,如上万并发量,受到CPU和内存的限制,单机模拟场景是实现不了的,为了让JMeter提供更大的负载能力,须使用它的分布式机制,即多台机器同时产生负载的功能. 以下参数分析可用于配置 ...

  3. layer close 关闭层IE9-浏览器崩溃问题解决

    针对ayer弹出层在IE上关闭导致浏览器崩溃的问题: 导致原因: 查看src源码,layer.close关闭总方法中有这么一行: layer.close = function(index){ ] + ...

  4. (十一)数组array

    变量:只能存一个值,数组可以存多个值 (1)普通数组,索引下标是整数: 1)定义: 方法一:一次赋一个值:语法:数组名[下标]=变量值 array[1]=linux array[2]=shell 方法 ...

  5. (五)mysql表操作和约束条件

    (1)表基本操作 1)创建表 create table 表名(字段 数据类型 约束条件) mysql> create table student1(id int,name varchar(50) ...

  6. CodeForces 672B Different is Good

    链接:http://codeforces.com/problemset/problem/672/B 本文链接:http://www.cnblogs.com/Ash-ly/p/5491176.html ...

  7. HDU1213 How Many Tables (并查集)

    题目大意: 有一个人要过生日了,请他的朋友来吃饭,但是他的朋友互相认识的才能坐在一起,朋友的编号从1 ~ n,输入的两个数代表着这两个人互相认识(如果1和2认识,2和3认识,那么1和3也就认识了).问 ...

  8. RabbitMQ (一) 简介和基本概念

    原文:https://blog.csdn.net/vbirdbest/article/details/78577043 一.简介 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序 ...

  9. Floyd-弗洛伊德算法

    今天,研究一下谁都能看懂的弗洛伊德算法. 首先,弗洛伊德算法是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法. 这个算法需要一个用到一个二维数组啊a[][],而a[i][j]表示的就 ...

  10. 8.1(java学习笔记)注解(Annotation)

    一.Annotation Annotation不是程序本身,但它可以对程序进行解释,这一点和注释类似. 但最大的不同点在于,注解可以被其他程序读取,然后可以对其进行一些有针对性操作. 这是注解与注释最 ...