我发现楼下们是不是想得太多了……
有必要用什么康托展开吗……
既然我学的是c++,那当然要知道STL大法好
重点来了!
思路:
用STL全排列函数,不断求上一个字典序,同时累加;
如果求不了了,说明这就是第一个字典序,就可以输出了。
AC代码(cpp):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| prev\_permutation()函数用法:()内为内存中的一段连续空间的起点和终点,每次调用都将指定内存中的值修改为上一个字典序,如果当前排列已是第一个,返回“false”。 #include <bits/stdc++.h> using namespace std; int n,ans; char a[10005];
int main(void){ ios::sync\_with\_stdio(false); cin>>n; for (int i=0;i<n;i++)cin>>a[i]; while (prev\_permutation(a,a+n))ans++; cout<<ans+1; } PS:说我是在抄2525的代码?别说的那么难听行不?我只是代码的搬运工。 想抄代码?恩哼哼^-^!
|