2019hdu暑假多校训练赛第五场1005 permutation 1 hdu 6628(全排列)
2019-08-05 21:23
316 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6628
题意:给定n和k,要求用1到n求出一个序列使得这个序列后一项减前一项形成的n-1长度的序列的字典序最小。
数据范围:1≤T≤40,2≤N≤20, 1≤K≤min(1e4,N!)
思路:首先字典序最小的序列一定是n,1,2,3.........n-2,n-1这样的。再考虑8的阶乘是40320,9的阶乘是362880,所以9以下的直接预处理全排列找出所有的可行解,排序,对于每次访问第k大的输出即可,对于9以上的,从10开始那么第一项和第二项就是固定的a[1]=n,a[2]=1,那么剩下的n-2项是大于等于8的,由于数据小于1e4所以全排列也不会影响到第二项的1,所以直接固定前两项,对于后面的n-2项全排列k次即可
[code]#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N=4e5+5; int n,m,t; struct p{ int num[11]; char str[11]; }a[11] ; bool cmp(p aa, p bb){ return strcmp(aa.str,bb.str)<0; } int main(){ int b[15]={0,1,2}; for(int k=2;k<=9;k++){ int cnt=1; do{ for(int i=1;i<=k;i++){ a[k][cnt].num[i]=b[i]; if(i!=1)a[k][cnt].str[i-2]=b[i]-b[i-1]+'A'; } a[k][cnt].str[k-1]='\0'; cnt++; }while(next_permutation(b+1,b+k+1)); sort(a[k]+1,a[k]+cnt,cmp); b[k+1]=k+1; } scanf("%d",&t); while(t--){ int k; scanf("%d%d",&n,&k); if(n>9){ int c[30]; c[1]=n; for(int i=2;i<=n;i++)c[i]=i-1; for(int i=1;i<k;i++){ next_permutation(c+1,c+n+1); } for(int i=1;i<=n;i++){ i==1||printf(" "); printf("%d",c[i]); } printf("\n"); continue; } for(int i=1;i<=n;i++){ i==1||printf(" "); printf("%d",a [k].num[i]); } printf("\n"); } return 0; }
相关文章推荐
- 2019hdu暑假多校训练赛第五场1002 three arrays hdu6625(字典树+贪心)
- 2019hdu暑假多校训练赛第六场1005 Snowy Smile hdu6638(线段树区间连续子段和最大,区间合并)
- 2019hdu暑假多校训练赛第六场1002 Nonsense Time hdu6635(LIS)
- 2019牛客暑假多校训练赛第五场E independent set 1(状压dp)
- 2019牛客暑假多校训练赛第五场F题 maximum clique 1 (最大团,补图最大独立集)
- 2019牛客暑假多校训练赛第七场H Pair(数位dp)
- HDU-2017 多校训练赛9-1005-FFF at Valentine
- 2019牛客暑假多校训练赛第七场C Governing sand(暴力)
- 北方大学 ACM 多校训练赛 第五场(D. 节操大师 - 二分)
- 2018年全国多校算法寒假训练营练习比赛(第四场) H 老子的全排列呢(next_permutation)
- 2018年全国多校算法寒假训练营练习比赛(第四场) H - 老子的全排列呢(next_permutation)
- HDU-2017 多校训练赛3-1005-RXD and dividing
- 2016多校联合训练赛 第五场1011 Two hdu5791
- HDU 5351 MZL's Border(2015多校第五场第9题) 写长串找规律
- hdu 5349 MZL's simple problem 2015多校联合训练赛#5 简单题
- 【NYIST】暑假训练赛 (一)-----Problem B
- 多校训练赛 Furude_Rika and wall 解题报告(dp)
- 2015多校联合第五场 hdu5349 MZL's simple problem 优先队列
- 2013多校联合训练第五场
- 13 多校第五场