当前位置: 代码迷 >> 综合 >> NYOJ - 我排第几个
  详细解决方案

NYOJ - 我排第几个

热度:11   发布时间:2024-01-20 18:08:40.0

我排第几个

时间限制: 1000 ms  |           内存限制: 65535 KB
难度: 3
描述

现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的?

输入
第一行有一个整数n(0<n<=10000);
随后有n行,每行是一个排列;
输出
输出一个整数m,占一行,m表示排列是第几位;
样例输入
3
abcdefghijkl
hgebkflacdji
gfkedhjblcia
样例输出
1
302715242
260726926
#include <stdio.h>
void fact(int a[])      // 求出阶乘 
{   for(int i = 2; i <= 11; i++){a[i] = i*a[i-1];}
}
int fun(char s[], int a[])     // 康拓展开定理 
{int ret = 0;for(int i = 0; i <= 11; i++){int count = 0;for(int j = i+1; j <= 11; j++){if(s[i] > s[j])count++;}ret += count*a[11 - i];}return ret + 1;
} 
int main()
{int n;int a[12] = {0,1};char s[15];fact(a);scanf("%d",&n);while(n--){scanf("%s",s);printf("%d\n",fun(s,a));}
}
  相关解决方案