NYOJ 139私は何番目ですか.
タイトルリンク:http://acm.nyist.net/JudgeOnline/problem.php?pid=139
コント展開:
公式の神馬の私はすべて読めないで、しかし私は使うことができます!
栗を挙げると、1324は{1,2,3,4}この並びの中で何番目に小さいのか、まず1位を見て、1より小さいのが0個あるので、0*3があります!、2位は、3より小さいのが1つ2(3前のは見なくてもいい)なので、1*2!つ、3位を見ていて、2より小さいのが0つなので、0*1!、4位は見なくてもいいです...だから0*3!+1 * 2! + 0 * 1! = 2ですから、1324は3番目に小さい数です.の
コード:
コント展開:
公式の神馬の私はすべて読めないで、しかし私は使うことができます!
栗を挙げると、1324は{1,2,3,4}この並びの中で何番目に小さいのか、まず1位を見て、1より小さいのが0個あるので、0*3があります!、2位は、3より小さいのが1つ2(3前のは見なくてもいい)なので、1*2!つ、3位を見ていて、2より小さいのが0つなので、0*1!、4位は見なくてもいいです...だから0*3!+1 * 2! + 0 * 1! = 2ですから、1324は3番目に小さい数です.の
コード:
#include <cstdio>
#include <cstring>
int n;
char s[20];
int fac[] = {1,1,2,6,24,120,720,5040,40320,362880,3628800,39916800,479001600};
int main()
{
while(~scanf("%d",&n))
{
while(n--)
{
long long ans = 0;
scanf("%s",s);
int len = strlen(s);
int t = 11;
for(int i = 0;i < len;++i)
{
int cnt = 0;
for(int j = i + 1;j < len;++j)
{
if(s[j] < s[i])
cnt++;
}
ans += cnt * fac[t--];
}
printf("%lld
",ans + 1);
}
}
return 0;
}