排在第几个
发布时间: 2015年10月10日 18:05 时间限制: 1000ms 内存限制: 256M
现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的?
每行输入一行字符串,保证是a~l这12个字符的某种排列
EOF结束
输出一个整数,代表这个排列排在第几位
复制
abcdefghijkl abcdefghiklj gfkedhjblcia
1 4 260726926
康拓模板题
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include <stack>
#include <map>
#include <cmath>
#include <vector>
#define max_ 10010
#define inf 0x3f3f3f3f
#define ll long long
using namespace std;
int f[13];
char tmp[13]={"abcdefghijkl"};
char sent[max_];
int main(int argc, char const *argv[])
{
int i,j;
f[0]=f[1]=1;
for(i=2;i<=12;i++)
f[i]=f[i-1]*i;
while(scanf(" %s",sent)!=EOF)
{
ll sum=0;
for(i=0;i<12;i++)
{
int cnt=0;
for(j=i+1;j<12;j++)
if(sent[i]>sent[j])
cnt++;
sum=sum+f[12-i-1]*cnt;
}
printf("%lld\n",sum+1 );
}
}