大佬帮帮忙!或者告诉我后面的测试点!卡在2出不去了
by Camelliail @ 2024-03-04 15:21:36
1我觉得你的有点麻烦,就是它这题考的其实就是全排列题,如果你做了全排列再做这题思绪可能就会好一点。题目的计数顺序是按照全排列的顺序的,一般简单的全排列爆搜就能打。
然后这题我们可以让全排列从给定的外星人手指的排列顺序开始,往后每进行一次排列时,计数++,直到加到最终要求的数为止
上代码
```
#include<iostream>
#include<algorithm>
using namespace std;
int n;//从1-n选r个数
int t;
int a[10010];
int b[10010];
int ans = 0;
void DFS(int i)
{
if (ans > t)
return;
if (i>n)
{
//放满了
ans++;
if(ans>t)
for (int i = 1; i <= n; i++)
{
cout << a[i];
if (i != n)
cout << ' ';
else cout << endl;
}
return;
}
for (int t = 1; t <= n; t++)
{
if (ans == 0)
{
t = a[i];
b[t] = 1;
DFS(i + 1);
b[t] = false;
}
else if (b[t] == false)
{
a[i] = t;
b[t] = 1;
DFS(i + 1);
b[t] = false;
}
}
}
int main()
{
cin >> n;
cin >> t;
for (int i = 1; i <= n; i++)
cin >> a[i];//先录入一个排列
DFS(1);
}
``````
by sml259 @ 2024-03-25 11:04:07
@[sml259](/user/1281336) 好的呢 谢谢!当时还不熟练全排列,现在已经会了!
by Camelliail @ 2024-04-12 23:01:58