Uim的情人节礼物·其之弐
题目描述
前传:详见洛谷 P2525
Uim 成功地按照顺序将礼物送到了 N N N 个妹子的手里并维持她们的和谐。
现在 Uim 现在想知道,他最终选择的顺序是所有给 N N N 个妹子送礼顺序中,字典序第几小的。送礼顺序可以看作 1 , 2 , ⋯ , N 1,2,\cdots,N 1,2,⋯,N 的一个排列。
输入格式
第一行一个整数 N N N,表示有 N N N 个数。
第二行一个整数 X X X,表示给出的排列。
输出格式
一个整数,表示是第几小的字典序。
样例 #1
样例输入 #1
3
231
样例输出 #1
4
提示说明
1 ≤ N ≤ 9 1\le N \le 9 1≤N≤9。
请注意输入的排列没有空格。
代码内容
// #include <iostream>
// #include <algorithm>
// #include <cstring>
// #include <sstream>//整型转字符串
// #include <stack>//栈
// #include <deque>//堆/优先队列
// #include <queue>//队列
// #include <map>//映射
// #include <unordered_map>//哈希表
// #include <vector>//容器,存数组的数,表数组的长度
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll c[10];
char a[10];
bool h[10];
int main()
{
ll N;
cin>>N;
scanf("%s",a+1);
c[0]=1;
for(ll i=1;i<=9;i++)
c[i]=c[i-1]*i;
ll ans=0;
for(ll i=1;i<=N;i++)
{
ll p=0;
for(ll j=1;j<a[i]-'0';j++)
{
if(!h[j]) p++;
}
h[a[i]-'0']=1;
ans+=p*c[N-i];
}
cout<<ans+1<<endl;
return 0;
}