比赛 20241023 评测结果 ATTTTTTTTT
题目名称 Farmer John’s Favorite Permutation 最终得分 10
用户昵称 yuan 运行时间 18.024 s
代码语言 C++ 内存使用 4.15 MiB
提交时间 2024-10-23 13:04:35
显示代码纯文本
//子任务1:枚举每一种排列O(N!)
#include <bits/stdc++.h>
using namespace std;

int T,n;
int main() {
	freopen("permutation.in","r",stdin);
	freopen("permutation.out","w",stdout);
	cin >> T;
	while (T--) {
		vector<int> num,h;//初始化
		cin>>n;
		for(int i=1;i<=n;i++)num.push_back(i);//字典序第1个排列1~n
		for(int i=1;i<n;i++)
		{
			int x;
			cin>>x;h.push_back(x);//目标状态
		}
		int ok=0;//是否找到目标
		do{
			vector<int> v=num,t;//用num初始化v
			//for(int i:v)cout<<i<<' ';//遍历vector元素
			while(v.size()>1)//当v元素个数>1
			{
				if(v.front()>v.back())
				{
					v.erase(v.begin());//删除头元素
					t.push_back(v.front());//新头,即原第二个元素
				}
				else
				{
					v.pop_back();//删除末尾元素
					t.push_back(v.back());//新末尾,原次末尾
				}
			}
			if(t==h)//得到的t和目标状态相同
			{
				ok=1;//标记更新,结束
				for(int i:num)cout<<i<<' ';//输出答案
				cout<<endl;
			}
		//next_permutation 产生num中元素的下一种排列
		}while(!ok && next_permutation(num.begin(),num.end()));
		
		if(!ok)cout<<-1<<endl;//不能得到目标状态
	}
	return 0;
}