/*
Author:段廷银
Date:2015.10.05
Email:clickyeah@yeah.net
* /
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory.h>
char a[13]="abcdefghijkl";
char b[13];
char s[13];
int visited[13];
long jcs[13];
int cnt;
void dfs(int k) {
if(k==12) {
cnt++;
if(strcmp(b,s)==0) {
printf("%d\n",cnt);
}
return;
}
int i=0;
for(i=0;i<12;i++) {
if(visited[i]==0) {
visited[i]=1;
b[k]=a[i];
dfs(k+1);
visited[i]=0;
}
}
}
int jc(int n) {
if(n<=1) return 1;
else return n*jc(n-1);
}
int cal()
{
int sum=0;
int i;
for(i=0;i<12;i++) {
int t=0;
int j;
for(j=i+1;j<12;j++){
if(s[j]<s[i]) t++;
}
sum += t*jc(11-i);
}
return sum+1;
}
int main() {
int n;
while(scanf("%d",&n)!=EOF) {
int i;
for(i=0;i<n;i++) {
scanf("%s",s);
//memset(b,0,13*sizeof(char));
memset(visited,0,13*sizeof(int));
//dfs(0);
printf("%d\n",cal());
}
}
return 0;
}
/*
input:
3
abcdefghijkl
hgebkflacdji
gfkedhjblcia
output:
1
302715242
260726926
*/
本文介绍了一个基于深度优先搜索(DFS)的算法,用于计算给定字符串的所有可能排列,并通过一种高效的方法来计算特定字符串排列的位置编号。该算法首先通过DFS遍历所有可能的字符排列,然后使用数学方法快速计算出特定字符串排列在整个全排列中的位置。
1790

被折叠的 条评论
为什么被折叠?



