Luogu P1160队列安排【链表/老文搬家】By cellur925
原文发表于2018-04-15 08:15:09,我的luogu博客qwq。
看到题以后,要求维护一个可在任意位置修改添加删除元素的序列,那么显然我们可以用到链表。
然而本蒟蒻不久前刚刚学会链表。链表也是线性结构,和数组比较,它的物理内存不连续,逻辑内存连续。数组在任意位置插入删除元素效率极差,链表就很棒了。
下面是给和我一样蒟的老哥们。
链表通常用结构体存储,一个节点有三个值,前驱、后继、权值。
链表初始化
int init()
{
tot=;
head=;tail=;
node[head].next=tail;
node[tail].pre=head;
}
在p后插入新节点 注意是在后
void insert(int p,int r)//插在p的后面
{
q=++tot;
node[q].val=r;
node[node[p].next].pre=q;
node[q].next=node[p].next;
node[p].next=q;
node[q].pre=p;
}
删除一节点
void remove(int p)
{
node[node[p].pre].next=node[p].next;
node[node[p].next].pre=node[p].pre;
}
这些是链表的基本操作。
这道题需要有一些变动。
由于每个人按号依次进入,所以val值就是本身的序号。
由于可以向左插也可以向右插,写这句的时候要有一些改动。向右直接插,向左需要向 向左插的节点的前驱插。
最后输出尤为注意。不能输出权值!具体见代码。
code
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,q,tmp,rp;
int tot=;
int head;
bool b[];
struct linkb{
int val;
int pre,next;
}node[];
void insert(int p,int r)//插在p的后面
{
q=++tot;
node[q].val=r;
node[node[p].next].pre=q;
node[q].next=node[p].next;
node[p].next=q;
node[q].pre=p;
}
void remove(int p)
{
node[node[p].pre].next=node[p].next;
node[node[p].next].pre=node[p].pre;
}
int main()
{
b[]=;node[].val=;
node[].next=;
scanf("%d",&n);
for(int i=;i<=n;i++)
{
int x=,y=;
scanf("%d%d",&x,&y);
b[i]=;
if(y==)
{
insert(x,i);
}
else if(y==)
{
insert(node[x].pre,i);
}
}
scanf("%d",&m);
for(int i=;i<=m;i++)
{
int x=;
scanf("%d",&x);
if(b[x]==) continue;
b[x]=;
rp++;
remove(x);
}
head=node[].next;
//printf("%d ",node[head].val);
tmp=head;
for(int i=;i<=n-rp;i++)
{
printf("%d ",node[tmp].val);
tmp=node[tmp].next;
}
printf("\n");
return ;
}
Luogu P1160队列安排【链表/老文搬家】By cellur925的更多相关文章
- luogu P1160 队列安排
		
二次联通门 :luogu P1160 队列安排 /* luogu P1160 队列安排 链表 手动模拟一下就好了... */ #include <cstdio> #define Max 5 ...
 - [Luogu 1160] 队列安排
		
Luogu 1160 队列安排 链表H2O H2O H2O模板. 太久不写链表,忘干净了,竟调了半个晚上. 保留备用. #include <cstdio> #include <cst ...
 - P1160 队列安排   洛谷
		
https://www.luogu.org/problem/show?pid=1160 题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进 ...
 - 洛谷 P1160 队列安排 Label:链表 数据结构
		
题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进队列,这时队列中只有他一个人: 2.2-N号同学依次入列,编号为i的同学入列方式为:老师 ...
 - P1160 队列安排 luogu洛谷
		
题目描述 一个学校里老师要将班上NNN个同学排成一列,同学被编号为1∼N1\sim N1∼N,他采取如下的方法: 先将111号同学安排进队列,这时队列中只有他一个人: 2−N2-N2−N号同学依次入列 ...
 - 洛谷——P1160 队列安排(链表的基础操作)
		
#include<bits/stdc++.h> using namespace std; ]; list<int> stus; list<];//用来存放每一项的迭代器 ...
 - 洛谷 P1160 队列安排
		
题目描述 一个学校里老师要将班上 NNN 个同学排成一列,同学被编号为 $1-N$ ,他采取如下的方法: 先将 111 号同学安排进队列,这时队列中只有他一个人: 2−N2-N2−N 号同学依次入列, ...
 - 队列  P1160 队列安排(啊啊  不会啊)
		
洛谷 题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进队列,这时队列中只有他一个人: 2.2-N号同学依次入列,编号为i的同学入列方式为 ...
 - P1160 队列安排
		
题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进队列,这时队列中只有他一个人: 2.2-N号同学依次入列,编号为i的同学入列方式为:老师 ...
 
随机推荐
- 洛谷——P3119 [USACO15JAN]草鉴定Grass Cownoisseur
			
P3119 [USACO15JAN]草鉴定Grass Cownoisseur 题目描述 In an effort to better manage the grazing patterns of hi ...
 - 【.Net 学习系列】-- Windows身份模拟(WindowsIdentity.Impersonate)时读取Access数据库
			
参考资料: WindowsIdentity.Impersonate https://msdn.microsoft.com/zh-cn/library/w070t6ka(v=vs.110).aspx A ...
 - SqlSugar最容易使用的ORM
			
SqlSugar官网
 - DELPHI7调用BERLIN中间件的中文字段名乱码的解决办法
			
MSSQL数据库的表使用中文字段名,BERLIN开发的DATASNAP中间件,DELPHI7调用中间件的查询方法返回数据给CLIENTDATASET.DATA,发现中文字段名乱码,中文字段名的值可以正 ...
 - C# 9.0新特性
			
CandidateFeaturesForCSharp9 看到标题,是不是认为我把标题写错了?是的,C# 8.0还未正式发布,在官网它的最新版本还是Preview 5,通往C#9的漫长道路却已经开始.前 ...
 - 我被C++开发欺辱的岁月
			
前言 人被压迫了,为什么不斗争?——鲁迅 作为一个C#开发者,我经历了,也见证了很多同行饱受C++开发的歧视和欺辱. 而且,这种行为,现在依然持续的发生在C#开发者的身上,就目前为止,绝大部分C#开发 ...
 - 如何扩展ArcGIS中的元数据编辑器
			
http://www.esrichina-bj.cn/old../library/arcnews16/Metadata.htm http://www.esrichina-bj.cn/old../lib ...
 - javascript array-like object
			
http://www.nfriedly.com/techblog/2009/06/advanced-javascript-objects-arrays-and-array-like-objects/ ...
 - iOS设计模式 - (1)概述
			
近期可自由安排的时间比較多, iOS应用方面, 没什么好点子, 就先放下, 不写了.花点时间学学设计模式. 之后将会写一系列博文, 记录设计模式学习过程. 当然, 由于我自己是搞iOS的, 所以之后设 ...
 - 杭电1232畅通project
			
畅通project Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...