Codeforces Round #309 (Div. 2) -D. Kyoya and Permutation
这题想了好久才写出来,没看题解写出来的感觉真的好爽啊!!!
题目大意:题意我看了好久才懂,就是给你一个序列,比如[4, 1, 6, 2, 5, 3],第一个数字
的值是4,那么我们找下标为4的数( 跟链表差不多意思 ),然后一直找到底,这些数分为一类,
如[4, 1, 6, 2, 5, 3] 就可以分为三类,[4, 2, 1] , [6, 3],[5],这三类,然后每个类里面按从大
往小排,然后类之间按字典序排,[4, 1, 6, 2, 5, 3] 重新组合之后为,[4, 2, 1] [5] [6, 3]=[4, 2, 1, 5, 6, 3]
我们把进行重组之后数字序列保持不变的 序列 按字典序大小从小到大排出来。
然后给你一个长度n和数字k,让你找出长度为n的序列中排第k个的序列是什么。
思路:首先我想的是怎样的序列它重新组合之后还是原序列,我打了一下表,基础序列为
1,2,3,4,……,n,只有相邻的两个数交换之后得到的是满足要求的序列。如果我们从小到大
枚举出所有的序列显然是不可能的复杂度太高,那么我们先求总共的序列数,我们设dp[ i ],
表示从i 到 n 一共有多少种交换方法。dp[n]=1,那么状态转移方程为dp[ i ] = dp[ i + 1 ]+dp[ i + 2 ] ,
为什么呢,因为到i这里的时候,我们可以选择交换i 和 i+1 或者不交换,交换的话种数是dp[ i +2 ],
不交换的话是dp[ i + 1 ]。
我们从n开始往前找,找到第一个大于k的dp[ s ],那么s和s+1是必须要交换的,因为如果不交换
种数为dp[ s + 2 ],又dp[ s + 2] < k 不满足。这样我们的问题就变成了k为k-dp[ s + 2]的相同问题
我们可以用dfs递归求解。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll dp[],n,k,ans[],cnt[];
void dfs(ll k)
{
if(k==) return;
int item=-;
for(int i=n;i>=;i--)
{
if(dp[i]>=k)
{
item=i;
break;
}
}
swap(ans[item],ans[item+]);
dfs(k-dp[item+]);
}
int main()
{
cin>>n>>k;
dp[n]=; dp[n-]=;
for(int i=n-;i>=;i--) dp[i]=dp[i+]+dp[i+];
for(int i=;i<=n;i++) ans[i]=i;
dfs(k);
printf("%d",ans[]);
for(int i=;i<=n;i++) printf(" %d",ans[i]);
puts("");
return ;
}
Codeforces Round #309 (Div. 2) -D. Kyoya and Permutation的更多相关文章
- 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) A. Kyoya and Photobooks
题目传送门 /* 找规律,水 */ #include <cstdio> #include <iostream> #include <algorithm> #incl ...
- Codeforces Round #309 (Div. 2) C. Kyoya and Colored Balls 排列组合
C. Kyoya and Colored Balls Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contes ...
- Codeforces Round #309 (Div. 2) A. Kyoya and Photobooks 字符串水题
A. Kyoya and Photobooks Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/5 ...
- Codeforces Round #309 (Div. 2) C. Kyoya and Colored Balls
Kyoya Ootori has a bag with n colored balls that are colored with k different colors. The colors are ...
- Codeforces Round #309 (Div. 2) A. Kyoya and Photobooks【*组合数学】
A. Kyoya and Photobooks time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- 贪心 Codeforces Round #309 (Div. 2) B. Ohana Cleans Up
题目传送门 /* 题意:某几列的数字翻转,使得某些行全为1,求出最多能有几行 想了好久都没有思路,看了代码才知道不用蠢办法,匹配初始相同的行最多能有几对就好了,不必翻转 */ #include < ...
- Codeforces Round #309 (Div. 1)
A. Kyoya and Colored Balls 大意: 给定$k$种颜色的球, 第$i$种颜色有$c_i$个, 一个合法的排列方案满足最后一个第$i$种球的下一个球为第$i+1$种球, 求合法方 ...
- C. Kyoya and Colored Balls(Codeforces Round #309 (Div. 2))
C. Kyoya and Colored Balls Kyoya Ootori has a bag with n colored balls that are colored with k diffe ...
随机推荐
- 使用fastreport以代码方式创建报表
Report report = new Report();// register the "Products" tablereport.RegisterData(dataSet1. ...
- JS在Html中使用JavaScript
一.三种方式 1)<script>元素 2)外部文件 3)文档模式 二.<script>元素 是向HTML页面插入JavaScript的主要方法:HTML 4.01为<s ...
- 淘淘商城之springmvc前端控制器
一.web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=&qu ...
- 第18月第20天 tensorflow安装
1. # Mac OS X $ sudo easy_install pip # Mac OS X, CPU only: $ sudo easy_install --upgrade six $ sudo ...
- tidb 架构 ~Tidb学习系列(1)
一 简介:今天来研究Tidb 二 安装测试: 0 下载Tidb wget http://download.pingcap.org/tidb-latest-linux-amd64.tar.gz 按如 ...
- transform 图标旋转,IE8、IE7不兼容
要将图标旋转,只需使用transform的rotate以及transition即可完成旋转的动画效果.ease 规定慢速开始,然后变快,然后慢速结束的过渡效果; ease-in 规定以慢速开始的过 ...
- Debian ifconfig 命令找不到
如何配置让 Debian 非特权用户也可以使用 ifconfig . ifconfig 在 /sbin 目录下,新建一个用户时, Debian 默认从 /etc/skel/ 复制配置文件, /sbin ...
- tomcat jetty
背景 其实这个比较毫无意义.只是当时突然知道了jetty,所以记下来,对于开发人员来说选择哪个一般意义不大. 转载 从架构上来看 Tomcat 在处理少数非常繁忙的连接上更有优势,也就是说连接的生命周 ...
- Expm 9_2 有向图的强连通分量问题
[问题描述] 给定一个有向图,设计一个算法,求解并输出该图的各个强连通分量. package org.xiu68.exp.exp9; import java.util.ArrayList; imp ...
- jquery里面的$.each()方法
$.each可以迭代jquery对象和数组 $(selector).each()专注于jquery对象的遍历