NOJ 1429 全排列的输出
来源:互联网 发布:mac chm阅读器 最好的 编辑:程序博客网 时间:2024/06/07 22:09
全排列的输出
时间限制(普通/Java) :1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 107 测试通过 : 32
题目描述
全排列就是n个不同元素排成一列,我们不妨可以简单地将n个元素理解为自然数1,2,…,n。现假设不同的全排列按照字典序自动从小到大排,123…n的序号为零。编程读入n、m,输出序号为m(m<=n!-1)的全排列。例如n=5,m=2,则输出为:
1 2 4 3 5
输入
一行两个自然数n、m(1<n<20,0<=m<=n!-1)。
输出
序号为m的全排列,每个元素后有一个空格。
样例输入
3 5
样例输出
3 2 1
题目来源
JSOI2010题目链接:http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1429
题目分析:生成第m个排列数,再练一次排列数板子
#include <cstdio>#include <algorithm>using namespace std;int a[21], n, cnt;bool get(){ int t1 = -1, t2; for(int i = n - 1; i > 0; i--) { if(a[i - 1] < a[i]) { t1 = i; break; } } if(t1 == -1) return false; t2 = t1; for(int i = t1 + 1; i < n; i++) { if(a[i] <= a[t1 - 1]) continue; t2 = i; } swap(a[t1 - 1], a[t2]); sort(a + t1, a + n); cnt++; return true;}int main(){ int m; scanf("%d %d", &n, &m); cnt = 1; for(int i = 0; i < n; i++) a[i] = i + 1; while(cnt <= m) get(); for(int i = 0; i < n; i++) printf("%d ", a[i]); printf("\n");}
0 0
- NOJ 1429 全排列的输出
- 全排列 NOJ 1103
- 全排列的输出
- 南邮 OJ 1429 全排列的输出
- 输出字符串的全排列
- 输出字符串的全排列
- 输出n的全排列
- 输出全排列的方案
- 输出字符串的全排列
- 输出字符串的全排列
- 输出n的全排列
- 一组数字的全排列按序输出
- 输出全排列的两种方式
- 输出一组整数的全排列
- 输出一串数字的全排列
- 输出数组的全排列方法
- 输出一个序列的全排列
- 输出 1 到 n 的全排列
- 三维变形技术FFD算法详解及实现
- poj2967
- iOS- 详解文本属性Attributes
- [Leetcode 131, Medium] Palindrome Partitioning
- Android快速开发框架-AIO
- NOJ 1429 全排列的输出
- stucts中package和action的配置
- 黑马程序员——IO流--转换流和键盘输入、File类
- Javascript 阻止冒泡
- 考题一:研究对全排列着色的性质 问题 A: 首先需要生成 n 的全排列然后对 n 的全排列进行着色, 使得相邻的两个数只需用最少颜色就可以把相邻的两个数用那区分开. (这里相邻包含两层含义:同时在自然
- C 算法精介----链表->单链表
- Hibernate和IBatis对比
- hdu 2830 逐行扫描dp求最大完全矩形
- struts.i18n.encoding的作用