您好,欢迎来到刀刀网。
搜索
您的当前位置:首页【题解】淘气合影

【题解】淘气合影

来源:刀刀网

淘气合影

题目描述

有 n 个孩子,他们的编号为 1 到 n,老师将他们根据身高排成一条直线(注意身高和编号的顺序无关),打算拍一张集体照。但他们非常淘气,接下来的故事连续发生了五次:


 1. 老师将孩子们带到了正确的位置,然后离开摆弄相机; 
 2. 一部分孩子乘机开小差,胡乱地插到其他孩子的位置中间;
 3. 老师按下快门,得到一张照片,发现有些孩子位子不对;
 4. 老师将所有开小差的孩子教育了一顿,被教育的孩子接下来就不会淘气,也不会乱跑了,返回第一步。

注意,每一轮的流程中,都可能有新的孩子出来捣乱。老师重复了五次,其中在第 i 张照片中,排在队伍中第 j 名的孩子编号为 ai,j
小爱能从这五张照片里,还原出老师心目中原本正确的排位么?

输入数据保证有解,而且有唯一解。

输入格式

第一行:一个整数 n;
第二行到第六行:每行有 n 个整数,构成一个 1 到 n 的排列。表示一张照片拍下的学生编号序列。

输出格式

表示原本正确的位置中,应该排在第 i 名的孩子编号

数据范围

对于 30% 的数据,1 ≤ n ≤ 12;
对于 60% 的数据,1 ≤ n ≤ 300;
对于 100% 的数据,1 ≤ n ≤ 100,000。

样例数据

输入:

6
2 3 4 5 1 6
2 1 3 4 5 6
3 1 2 4 5 6
4 1 2 3 5 6
5 1 2 3 4 6

输出:

1 2 3 4 5 6

思路

参考程序

//C++参考程序
#include<iostream>
#include<algorithm>

using namespace std;
int pos[10005][6];  //n个人每次的站位置
int a[100005];//n个人的编号
//判断x是否在y的左侧
//统计x站在y左侧的次数3次以上 x在y的左侧
//sort函数 cmp参数的作用 

bool cmp(int x,int y)
{
	int left=0;
	for(int i=1;i<=5;i++)
	{
		if(pos[x][i]<pos[y][i])
		{
			left++;
		}
		return left>=3;		
	}	
} 
 
int main()
{
	int n;//n个人 
	cin>>n;
	int x;
	for(int i=1;i<=n;i++)
	{
		a[i]=i;
	}
	
	for(int i=1;i<=5;i++)	//5次 
	{
		for(int j=1;j<=n;j++)	//n个人 
		{
			cin>>x;
			pos[x][i]=j;	//编号x的人站的位置 
		}	
	} 
	
	sort(a+1,a+n,cmp);
	for(int i=1;i<=n;i++)
	{
		cout<<a[i]<<" ";
	}
	return 0;
} 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务