第一次碰到这种题,难度对我来说略大。首先题目的意思看了很久才明白,但是依然不会做,所以第一次百度发现了全排列这一说法,于是花时间学习了一下但是发现对应不上这道题,还是只有看另外博客主的文章,跟着他们的代码才理解了做法,还是自己太弱了,给出博客主的:hdu 2062
然后是自己的代码如下:
#include<iostream> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; ll a[21]; ll b[21]; int main() { ll m, n,i, t; a[1] = 1; for (i = 2; i <= 20; i++) a[i] = (i - 1)*a[i - 1] + 1; while (cin >> m >> n) { for (i = 1; i <= 20; i++) b[i] = i; while (n&& m) { t = n / a[m] + (n%a[m] == 0 ? 0 : 1); if (t) { cout << b[t]; n -= (t - 1)*a[m] + 1; for (i = t; i < m; ++i) b[i] = b[i + 1]; if (n == 0) cout << endl; else cout << " "; } m--; } } return 0; }