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的同学入列方式为:老师 ...
随机推荐
- 洛谷—— P1977 出租车拼车
https://www.luogu.org/problem/show?pid=1977 题目背景 话说小 x 有一次去参加比赛,虽然学校离比赛地点不太远,但小 x 还是想坐 出租车去.大学城的出租车总 ...
- P2384 最短路 洛谷
https://www.luogu.org/problem/show?pid=2384 题目背景 狗哥做烂了最短路,突然机智的考了Bosh一道,没想到把Bosh考住了...你能帮Bosh解决吗? 他会 ...
- 检测socket链接是否断开
[解决方案] 1. 发送重试,由业务完成. 因为club_l5的send接口不会保留用户发送的内容,在recv失败的情况下,用户发送的数据已经丢失,所以只能由业务进行重试. 结论: ...
- 【Todo】C++和Java里面的浮点数及各种数字表示
今天看了这篇文章,是讲C++中的浮点类型的:<浮点数的二进制表示> 再复习一下Java里面的Float和Double. 首先,直接数字赋值给Float变量是不行的,数字后要加上F,这样写: ...
- enumerateObjectsUsingBlock 、for 、for(... in ...) 的差别 & 性能測试
for VS for(... in ...) for 的应用范围广基本能够NSArray.NSArray以及C语言的数组等,而for(... in ...)仅限于NSArray.NSArray等 fo ...
- 把A表中的a字段和b字段数据 复制到B表中的aa字段和bb字段
insert into tab2 (column1,column2) select column1,column2 from tab1
- quick-cocos2d-x教程10:实现血条效果。
血条是常见功能.能够通过一个血条背景和一个不断改变的血条宽度.来实现少血. 在MainScence.lua中,先改代码: function MainScene:ctor() local bg ...
- 全局最小割模版 n^3
//点标从0-n-1, 開始时先init 复杂度n^3 //对于边(u,v,flow): //g[u][v]+=flow; //g[v][u]+=flow; typedef long long ll; ...
- hdu1133 Buy the Ticket (卡兰特数应用+java大数)
题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=1133 [题意] 电影票50块一张 有m个人手里正好有50块,n个人手里正好有100块,售票厅開始没有 ...
- 微软Build2016:Xamarin杂记
去年的Build2015技术大会.留给人印象最深的莫过是Windows 10在手机端.PC端.Xbox等硬件平台上的大一统.还有非常具有科幻气质的HoloLens技术的各种展示.去年尽管也展示了Xam ...