nyoj-139-我排第几个(康托展开)
2015-04-08 21:52
148 查看
我排第几个
时间限制:1000 ms | 内存限制:65535 KB难度:3
描述
现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的?
输入第一行有一个整数n(0<n<=10000);
随后有n行,每行是一个排列;输出输出一个整数m,占一行,m表示排列是第几位;样例输入
3 abcdefghijkl hgebkflacdji gfkedhjblcia
样例输出
1 302715242 260726926
来源[苗栋栋]原创上传者
苗栋栋
//康托展开 #include <iostream> #include<string> using namespace std; const int N = 12; long long a = { 0, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800, 39916800 };//0-12的阶乘 long long Cantor(string s) { int i, j, count; long long res = 1; for (i = 0; i < N; ++i) { count = 0; for (j = i + 1; j < N; ++j) if (s[i] > s[j])//如果前面一个大于后面 ++count; res = res + count * a[N - i - 1];<span id="transmark"></span> } return res; } int main() { int n; cin>>n; while(n--){ string a; cin>>a; long long res=Cantor(a); cout<<res<<endl; } return 0; }
相关文章推荐
- nyoj139我排第几个&nyoj第几是谁?——康托展开及康托逆展开
- nyoj 139 我排第几个(康托展开)
- nyoj 139 我排第几个(康托展开)
- nyoj 139 我排第几个(康托展开)
- NYOJ 139 我排第几个(康托展开)
- nyoj 139 我排第几个(康托展开)
- nyoj 139 我排第几个【数学】【康托展开】
- nyoj 139 我排第几个(康托展开)
- nyoj 139 我排第几个(康托展开)
- nyoj 139 我排第几个(康托展开)
- NYOJ 139 我排第几个(康托展开)
- nyoj 139 我排第几个(康托展开)
- nyoj 139 我排第几个(康托展开)
- nyoj 139 我排第几个(康托展开)
- nyoj 139 我排第几个(康托展开)
- nyoj 139 我排第几个(康托展开)
- nyoj 139我排第几个(康托展开)
- nyoj 139 我排第几个(康托展开)
- NYOJ139我排第几个(康托展开)
- nyoj 139 我排第几个(康托展开)