0分求助大佬
查看原帖
0分求助大佬
747070
jyhDora2011楼主2025/1/19 16:09

这是很久之前好像是在别的网站做过一样题目AC,交到这个0分

有什么致命性错误?、

#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;
}

2025/1/19 16:09
加载中...