ZJNU 1133 - Subset sequence——中级
推出n=1到4时,An排列的种类数分别为
1 4 15 64
可得
(1+1)*2=4
(4+1)*3=15
(15+1)*4=64
...
故用一数列r[n]记录An的种类总数
当n=3时,列举出以下15种从大到小的排列
1
1 2
1 2 3
1 3
1 3 2
2
2 1
2 1 3
2 3
2 3 1
3
3 1
3 1 2
3 2
3 2 1
可得开头为1,2,3时分别由5种排列,并且这5种内都有一种是这个数自身
可得r[n]/n-1=r[n-1],又得出上面的递推公式
所以定义一个数组rd[n]=r[n]/n
rd[n]则表示开头相同时的种类数
取上面列举的排列第2到第5项
去掉第一个1后,得到
2
2 3
3
3 2
即用2和3两个数进行同样的排列
故得出解题步骤:
再定义一个新数列dat,存放1到n的数字
每次用(m-1)/rd[n]+1得出第一个数现在在dat数列中的位置,输出后取出,该位置其后的所有数字前移一位
然后m需要移动至下一层的相对位置
(p-1)*rd[n]减去前面p-1块,再把当前块的唯一一个只有一个数字组成的序列去掉
所以m-=(p-1)*rd[n]+1
因为输出了一个,所以n-=1
一直循环下去,直到m和n其一为0,结束循环
#include<stdio.h>
int main(){
int i,n,p,dat[];
long long m,r[],rd[];
r[]=r[]=rd[]=;
for(i=;i<=;i++){
r[i]=(r[i-]+)*i;
rd[i]=r[i]/i;
}
while(scanf("%d%lld",&n,&m)!=EOF){
for(i=;i<;i++)
dat[i]=i;
while(n&&m){
p=(m-)/rd[n]+;
printf("%d",dat[p]);
for(i=p;i<=n;i++)
dat[i]=dat[i+];
m-=(p-)*rd[n]+;
putchar(m>?' ':'\n');
n--;
}
}
return ;
}
ZJNU 1133 - Subset sequence——中级的更多相关文章
- ***1133. Fibonacci Sequence(斐波那契数列,二分,数论)
1133. Fibonacci Sequence Time limit: 1.0 secondMemory limit: 64 MB is an infinite sequence of intege ...
- HDU 2062:Subset sequence(思维)
Subset sequence Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- HDU 2062 Subset sequence (找规律)
题目链接 Problem Description Consider the aggregate An= { 1, 2, -, n }. For example, A1={1}, A3={1,2,3}. ...
- HDU 2062 Subset sequence 数位dp,思路 难度:1
http://acm.hdu.edu.cn/showproblem.php?pid=2062 Subset sequence Time Limit: 1000/1000 MS (Java/Others ...
- URAL 1133. Fibonacci Sequence
题目链接 #include <cstdio> #include <string> #include <cstring> #include <iostream& ...
- HDU 2062 Subset sequence
我是把它当做一道数学题来做的. 这篇题解写的有点啰嗦,但是是我最原始的思维过程. 对于一个集合An= { 1, 2, …, n },在n比较小的情况下,在纸上按字典顺序把所有子集排列一下. 以n=3, ...
- 【HDOJ】2062 Subset sequence
这道题目非常好,饶了点儿圈子.我的思路是,先按照组排列.例如,1 2 31 2 2 1 3 11 2 3 2 1 3 ...
- hdu(2062)-Subset sequence 组合数学
意甲冠军:查找集合{1,2,3...n}第一m一个排列子. 收集的线索所行的大小. 例两个元素的排列子集合按字典树排列是:{1},{1,2},{2},{2,1}: 解法:一个一个元素来确定,每次把剩余 ...
- URAL 1133 Fibonacci Sequence(数论)
题目链接 题意 :给你第 i 项的值fi,第 j 项的值是 fj 让你求第n项的值,这个数列满足斐波那契的性质,每一项的值是前两项的值得和. 思路 :知道了第 i 项第j项,而且还知道了每个数的范围, ...
随机推荐
- JS高级学习笔记(6)- 事件循环
参考文章:深入理解JS引擎的执行机制 JavaScript 异步.栈.事件循环.任务队列 我的笔记:ES系列之Promise async 和 await Event Loop 前提 js ...
- 设置Apache(httpd)和Nginx 开机自启动
方法1: 进入目录: vi /etc/rc.d/rc.local #设置apache 和 nginx 开机自启动/usr/sbin/apachectl start/usr/sbin/nginx s ...
- docker入门资料及常用命令
Docker17中文开发手册 :https://www.php.cn/manual/view/36147.html Linux部署Docker及常用命令: https://www.cnblog ...
- POJ 1502:MPI Maelstrom Dijkstra模板题
MPI Maelstrom Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6499 Accepted: 4036 Des ...
- POJ 3438:Look and Say
Look and Say Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 9196 Accepted: 5566 Desc ...
- maven工具引入lib下的jar文件
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot ...
- .NET CORE 热更新,否则提示DLL文件在使用中
1.创建空目录,取名updatesite,里面放置app_ffline.htm文件,网站更新中访问使用,内容随意 2.updatesite目录下面创建Release目录,用于放置更新的dll文件 3. ...
- .equal()和==的区别
1.首先,equal和==最根本的区别在于equal是一个方法,而==是一个运算符. 2.一般来说,==运算符比较的是在内存中的物理地址,.equal()比较的是哈希算法值是否相等(即hashcode ...
- SQL基础教程(第2版)第5章 复杂查询:5-1 视图和表
本章将以此前学过的SELECT语句,以及嵌套在SELECT语句中的视图和子查询等技术为中心进行学习.由于视图和子查询可以像表一样进行使用,因此如果能恰当地使用这些技术,就可以写出更加灵活的 SQL 了 ...
- CYPHER 语句(Neo4j)
CYPHER 语句(Neo4j) 创建电影关系图 新增 查找 修改 删除 导入 格式转换 创建电影关系图 CREATE (TheMatrix:Movie {title:'The Matrix', re ...