我排第几个?
来源:互联网 发布:github 知乎 编辑:程序博客网 时间:2024/04/27 21:03
该题的解答用到了:康托展开
我排第几个
时间限制:1000 ms | 内存限制:65535 KB难度:3- 描述
现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的?
- 输入
- 第一行有一个整数n(0<n<=10000);
随后有n行,每行是一个排列; - 输出
- 输出一个整数m,占一行,m表示排列是第几位;
- 样例输入
3abcdefghijklhgebkflacdjigfkedhjblcia
- 样例输出
1302715242260726926
该题的解答用到了:康托展开
我排第几个
时间限制:1000 ms | 内存限制:65535 KB
难度:3
现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的?
- 输入
- 第一行有一个整数n(0<n<=10000);
随后有n行,每行是一个排列; - 输出
- 输出一个整数m,占一行,m表示排列是第几位;
- 样例输入
3abcdefghijklhgebkflacdjigfkedhjblcia
- 样例输出
1302715242260726926
代码:
#include <iostream>#include <string>#include <math.h>#include <map>using namespace std;int a[15]={0,1},b[15];void JC(){ for(int i=2;i<12;i++) a[i]=a[i-1]*i;}int main(){ JC(); map<char,int> m; for(int i=0;i<12;i++) m['a'+i]=i+1; int n; cin>>n; while(n--) { string s; cin>>s; int sum=1,x,y,i,j,f; for(j=0;j<=11;j++)//从左向右遍历 ————》康托展开通过这2层for循环实现 { f=0; for(int k=0;k<=j;k++)//找之前比目标小的数的个数 { if(m[s[k]]<m[s[j]]) f++; } b[j]=m[s[j]]-1-f; y=b[j]*a[11-j]; sum+=y; } cout<<sum<<endl; } return 0;}
- 我排第几个?
- 我排第几个
- 我排第几个
- 我排第几个
- 我排第几个
- 我排第几个
- 我排第几个
- 我排第几个
- 我排第几个
- 我排第几个
- 我排第几个
- 我排第几个
- 我排第几个
- NYOJ - 我排第几个
- 139 我排第几个
- acm-我排第几个
- NYOJ_139我排第几个
- 139 我排第几个
- Cisco路由器配置与管理完全手册
- 如何判定2个数的大小,不适用if-else语句
- zoj 3645 高斯消元
- 【deep learning学习笔记】注释yusugomori的RBM代码 --- 头文件
- 上升子序列问题
- 我排第几个?
- 疯狂virtualbox实战讲学录
- 数据库命名规范
- 各种web环境下的wordpress伪静态规则
- mysql联合主键的自增问题
- android 适配器
- Jboss配置 MS SQL SERVER 2008数据库连接池实例
- 简单android代码
- EXTJS Grid自适应浏览器