hdu 2062

第一次碰到这种题,难度对我来说略大。首先题目的意思看了很久才明白,但是依然不会做,所以第一次百度发现了全排列这一说法,于是花时间学习了一下但是发现对应不上这道题,还是只有看另外博客主的文章,跟着他们的代码才理解了做法,还是自己太弱了,给出博客主的: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;
}

猜你喜欢

转载自blog.csdn.net/qq_40058686/article/details/80045930
今日推荐