栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

P1160 队列安排

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

P1160 队列安排

显然,这又是一道模拟链表的题型;

#include
using namespace std;

struct student
{
	int left;  //左手
	int right;   //右手
	int e = 1;  //是否删除
}stu[1000000];

//模拟链表

void add(int i,int k,int f) //则表示将i号同学插入到k号同学的左边,f为1则表示插入到右边,
{
	if (f == 0)  //i插入到k的左边
	{
		stu[i].left = stu[k].left;
		stu[stu[k].left].right = i;
		stu[i].right = k;
		stu[k].left = i;
	}

	if (f == 1)   //i插入到k的右边
	{
		stu[i].right = stu[k].right;
		stu[stu[k].right].left = i;
		stu[k].right = i;
		stu[i].left = k;
	}
}


int main()
{
	int n;
	cin >> n;   //n个同学
	int k, p;
	stu[0].right = 1;
	stu[0].left = 1;
	stu[1].left = 0;
	stu[1].right = 0;
	for (int i = 2; i<=n; i++)
	{
		cin >> k >> p;    
		add(i, k, p);   //则表示将i号同学插入到k号同学的左边,p为1则表示插入到右边,
	}
	
	cin >> n;
	while (n--)
	{
		cin >> k;
		stu[k].e = 0;
	}
	for (int i = 0; ;i=stu[i].right)
	{
		if (stu[i].e == 1&&i!=0)
		{
			cout << i << ' ';
		}
		if (stu[i].right == 0)
			break;
	}
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/994732.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号