Codeforces 553B Kyoya and Permutation
题意
- 本题题意不太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的更多相关文章
- codeforces 553B B. Kyoya and Permutation(找规律)
		题目链接: B. Kyoya and Permutation time limit per test 2 seconds memory limit per test 256 megabytes inp ... 
- 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/ ... 
- Codeforces Round #309 (Div. 2) -D. Kyoya and Permutation
		Kyoya and Permutation 这题想了好久才写出来,没看题解写出来的感觉真的好爽啊!!! 题目大意:题意我看了好久才懂,就是给你一个序列,比如[4, 1, 6, 2, 5, 3],第一个 ... 
- Codeforces A. Kyoya and Colored Balls(分步组合)
		题目描述: Kyoya and Colored Balls time limit per test 2 seconds memory limit per test 256 megabytes inpu ... 
- [Codeforces 553E]Kyoya and Train(期望DP+Floyd+分治FFT)
		[Codeforces 553E]Kyoya and Train(期望DP+Floyd+分治FFT) 题面 给出一个\(n\)个点\(m\)条边的有向图(可能有环),走每条边需要支付一个价格\(c_i ... 
- Codeforces554D:Kyoya and Permutation
		Let's define the permutation of length n as an array p = [p1, p2, ..., pn] consisting of n distinct ... 
- Codeforces 691D Swaps in Permutation
		Time Limit:5000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit Status Prac ... 
- Codeforces 500B. New Year Permutation[连通性]
		B. New Year Permutation time limit per test 2 seconds memory limit per test 256 megabytes input stan ... 
- codeforces   500B.New Year Permutation   解题报告
		题目链接:http://codeforces.com/problemset/problem/500/B 题目意思:给出一个含有 n 个数的排列:p1, p2, ..., pn-1, pn.紧接着是一个 ... 
随机推荐
- SVN被锁定解决办法
			转自:https://blog.csdn.net/strwangfan/article/details/78748393: 今天用SVN的时候出现被锁定的情况,既不能更新代码也不能提交. 解决方法如下 ... 
- 查找(二分、hash、桶)
			先上一个最简单的题 1230 元素查找 给出n个正整数,然后有m个询问,每个询问一个整数,询问该整数是否在n个正整数中出现过. 输入描述 Input Description 第一行两个整数 n 和m. ... 
- JDK 动态代理 源码简单分析
			代理的作用就是在访问真实对象之前或者之后可以额外加入一些操作. JDK 的动态代理 只需要 5 步. 真实对象必须要实现接口,首先创建一个接口 public interface HelloWorld ... 
- hdu 3666(差分约束,手动栈解决超时问题)
			THE MATRIX PROBLEM Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ... 
- ros pcl sensor::pointcloud2 转换成pcl::pointcloud
			#include <pcl_conversions/pcl_conversions.h> #include <pcl/point_types.h> #include <p ... 
- explain分析SQL语句详解
			性能分析explain MySql Query Optimizer是MySql中专门负责优化select语句的优化器模块,主要功能:通过计算分析系统中收集到的系统信息,为客户端请求的Query提供他认 ... 
- 2017中国大学生程序设计竞赛 - 女生专场C【前后缀GCD】
			C HDU - 6025 [题意]:去除数列中的一个数字,使去除后的数列中所有数字的gcd尽可能大. [分析]: 数组prefixgcd[],对于prefixgcd[i]=g,g为a[0]-a[i]的 ... 
- Python_Tips[7] -> 偏函数
			偏函数 / Partial Function 使用偏函数可以对函数的部分预先知道的参数进行冻结,从而缓存函数参数,而在运行时再释放参数进行使用.所以偏函数适用于需要多次调用同样一个函数且其中一个参数固 ... 
- hadoop 编译代码及运行
			搞定了hadoop配置之后,可以写代码运行了,首先要配一下CLASS_PATH,修改/etc/profile export JAVA_HOME=/usr/lib/jvm/java--openjdk-i ... 
- Android中的MVC,MVP和MVVM
			韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha MVC,MVP,MVVM的区别 #MVC 软件可以分为三部分 视图(View):用户界面 ... 
