推出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——中级的更多相关文章

  1. ***1133. Fibonacci Sequence(斐波那契数列,二分,数论)

    1133. Fibonacci Sequence Time limit: 1.0 secondMemory limit: 64 MB is an infinite sequence of intege ...

  2. HDU 2062:Subset sequence(思维)

    Subset sequence Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...

  3. HDU 2062 Subset sequence (找规律)

    题目链接 Problem Description Consider the aggregate An= { 1, 2, -, n }. For example, A1={1}, A3={1,2,3}. ...

  4. HDU 2062 Subset sequence 数位dp,思路 难度:1

    http://acm.hdu.edu.cn/showproblem.php?pid=2062 Subset sequence Time Limit: 1000/1000 MS (Java/Others ...

  5. URAL 1133. Fibonacci Sequence

    题目链接 #include <cstdio> #include <string> #include <cstring> #include <iostream& ...

  6. HDU 2062 Subset sequence

    我是把它当做一道数学题来做的. 这篇题解写的有点啰嗦,但是是我最原始的思维过程. 对于一个集合An= { 1, 2, …, n },在n比较小的情况下,在纸上按字典顺序把所有子集排列一下. 以n=3, ...

  7. 【HDOJ】2062 Subset sequence

    这道题目非常好,饶了点儿圈子.我的思路是,先按照组排列.例如,1            2           31 2         2 1        3 11 2 3      2 1 3  ...

  8. hdu(2062)-Subset sequence 组合数学

    意甲冠军:查找集合{1,2,3...n}第一m一个排列子. 收集的线索所行的大小. 例两个元素的排列子集合按字典树排列是:{1},{1,2},{2},{2,1}: 解法:一个一个元素来确定,每次把剩余 ...

  9. URAL 1133 Fibonacci Sequence(数论)

    题目链接 题意 :给你第 i 项的值fi,第 j 项的值是 fj 让你求第n项的值,这个数列满足斐波那契的性质,每一项的值是前两项的值得和. 思路 :知道了第 i 项第j项,而且还知道了每个数的范围, ...

随机推荐

  1. jQuery中的一些方法 19.5.20课上笔记

    after() insertAfter():特定元素后面插入新的节点 before() insertBefore():特定元素前面插入新的节点 append() appendTo():向特定元素元素内 ...

  2. Unity 协程运行时的监控和优化

    我是快乐的搬运工: http://gulu-dev.com/post/perf_assist/2016-12-20-unity-coroutine-optimizing#toc_0 --------- ...

  3. 如何利用vue脚手架创建一个vue项目

    1.安装node.js 2.打开命令行查看下npm和node是否都安装好 node -v npm -v 3.安装淘宝镜像cnpm $ npm install -g cnpm --registry=ht ...

  4. Ubuntu16.04安装配置Caffe教程(GPU版)

    推荐博客:https://www.linuxidc.com/Linux/2017-11/148629.htmhttps://blog.csdn.net/yggaoeecs/article/detail ...

  5. 18 12 18 给服务器添加logging 日志功能

    Python中有个logging模块可以完成相关信息的记录,在debug时用它往往事半功倍 1. 日志级别 日志一共分成5个等级,从低到高分别是: DEBUG INFO WARNING ERROR C ...

  6. 监听配置问题,SID与Service_Name区别

    监听配置问题,SID与Service_Name区别 1.数据库实例名SID 概念:数据库实例名用于和操作系统进行联系的标识,是数据库和操作系统之间的交互用的书数据库实例名.实例名也被写入参数文件中,该 ...

  7. JavaScript 之 原型及原型链

    对象[回顾] 通过字面量创建对象 //通过字面量创建对象 var obj1 = { name:'Jack', age: 18 } 通过系统自带的构造函数构造对象 // 通过系统自带的构造函数构造对象 ...

  8. git子模块使用

    如下项目有多个标红的子模块 1.首先进入每个子模块目录,init初始化子模块仓库,然后提交远程. 2.在每个子目录都初始化好仓库后,进入lv-qggz主目录,只初始化该仓库,然后依次添加子模块的仓库地 ...

  9. CommandNotFoundError: No command 'conda conda'.

    出现情形 当前conda版本:4.6.11 当使用git bash,无论是在vscode中,还是在桌面上打开bash,都会出现这个错误.但是在cmd中,就可以识别conda命令. 解决 该错误只在4. ...

  10. c#连接sql server数据库字符串

    第一种方式 Data Source=数据库地址;Initial Catalog=数据库名称;User Id=数据库登录名;Password=数据库密码;[Integrated Security=SSP ...