社区讨论
0分求助大佬
P1088[NOIP 2004 普及组] 火星人参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @m63c95gy
- 此快照首次捕获于
- 2025/01/19 16:11 去年
- 此快照最后确认于
- 2025/11/04 11:17 4 个月前
这是很久之前好像是在别的网站做过一样题目AC,交到这个0分
有什么致命性错误?、
CPP#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int n,m,arr[1001115],book[100001],cnt=0,ans[10005];//cnt是找到了从火星人数字开始的第cnt个全排列数(火星人数字为1)
void dfs(int x)
{
//有没有确定到n+1位,确定的是是否找到了一个全排列数
if(x==n+1)
{
cnt+=1;
//因为cnt=1才是定位到了火星人的全排列数,因此要m+1
if(cnt==m+1)
{
//输出ans
for(int i=1;i<=n;i++)
{
printf("%d ",ans[i]);
}
exit(1);//终止整个函数
}
return ;
}
for(int i=1;i<=n;i++)
{
//如果当前还没有定位到或星人的数字
if(cnt==0)
{
//那么就需要把i改成火星人第x位上的数字
i=arr[x];
}
if(book[i]==0)
{
book[i]=1;
ans[x]=i;
dfs(x+1);
book[i]=0;
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d",&arr[i]);
}
dfs(1);
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...