nyoj 第几是谁
第几是谁?
- 描述
- 现在有"abcdefghijkl”12个字符,将其按字典序排列,如果给出任意一种排列,我们能说出这个排列在所有的排列中是第几小的。但是现在我们给出它是第几小,需要你求出它所代表的序列.
- 输入
- 第一行有一个整数n(0<n<=10000);
随后有n行,每行是一个整数m,它代表着序列的第几小; - 输出
- 输出一个序列,占一行,代表着第m小的序列。
- 样例输入
-
3 1 302715242 260726926
- 样例输出
-
abcdefghijkl hgebkflacdji gfkedhjblcia
先了解下康拓展开和逆康拓展开。#include <iostream>
#include <cstdio>
using namespace std;int main()
{
long long fac[12]; //保存1-11的阶乘
fac[0]=fac[1]=1;
for(int i=2;i<12;i++)
fac[i]=fac[i-1]*i;
int n,a[12],b[12];
cin>>n;
while(n--)
{
int m;
cin>>m;
m--;
for(int i=0;i<12;i++)//记录每个字符在使用之前时候被使用过,
b[i]=i;
for(int i=0;i<12;i++)
{
int result;
result=m/fac[11-i]; //求比当前位置小的有几种情况
a[i]=b[result]; //比如:比有三个比***小的字符,则***=3+ASCII;
for(int j=result;j<11;j++) //比如:比有三个比***小的字符,则***=4+ASCII,但***已经出现过,所以
b[j]=b[j+1]; //****= 4+ASCII+1;
m-=result*fac[11-i];//康托展开:a[n]*(n-1)!+a[n-1]*(n-2)!+......+a[0]=sum;
} //则 a[n-1]*(n-2)!+......+a[0]=sum- a[n]*(n-1)!;
for(int i=0;i<12;i++)
printf("%c",a[i]+97);
cout<<endl;
}
return 0;
}
最新文章
- 传智播客DotNet面试题
- C语言程序设计第11次作业
- linux两个文件修改主机名
- Redis-sentinel监控
- RGBa颜色 css3的Alpha通道支持
- Hdu 5073 Galaxy 精度问题
- [转]理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用
- ThinkPHP中处理模板引擎的volist标签
- Discuz!另一处SSRF无须登陆无须条件
- SQL Update
- QLayout删除所有布局
- 常用Dockerfile举例
- hashlib 模块用来进行hash
- 基于CentOS搭建Nginx 静态网站
- spring3-mvc-maven-hello-world-master mvn jetty:run 及 mvn war:war 指令
- elasticsearch学习笔记——相关插件和使用场景
- header头参数不能带下划线
- laraver框架学习
- java学习第01天(程序开发体验)
- 第一章 关于html适应手机屏幕的写法
热门文章
- awk多分隔符功能及wc命令案列及企业级应用
- 关于Android attrs 自定义属性的说明
- Myeclipse配置tomcat,以及简单的Myeclipse的配置
- jqgrid 单元格引入时间datepicker控件
- 【Unity与23种设计模式】访问者模式(Visitor)
- PHP方法实现1-9数列中添加‘+’,‘-’或&#39;&#39;,使和为100,并输出数列
- MYSQL汇总
- java中一个引人深思的匿名内部类
- Java基础知识回顾之二 ----- 修饰符和String
- eclipse异常解决:Errors occurred during the build.........