首页 > 其他分享 >P1160 队列安排

P1160 队列安排

时间:2022-12-13 11:24:23浏览次数:65  
标签:Node head struct 队列 安排 Head next int P1160

P1160 队列安排

题目简述

将N个同学依次插入队伍中,再删除m个同学,求最终的队伍顺序


思路

这题是个很好的练习链表的题目,要注意的是在链表的头和尾要搞一个Head和Tail指针,不然超出边界会出错


代码

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int Map[N];
struct Node{
  int id;
  struct Node *head;
  struct Node *next;
}s[N];
int main(){
  int n;
  cin>>n;
  for(int i=0;i<=n;i++){
  	s[i].id=i;
  	s[i].head=NULL;
  	s[i].next=NULL;
  }
  struct Node *Head=&s[1];
  struct Node *Next=&s[1];
  for(int i=2;i<=n;i++){
    int k,p;
    cin>>k>>p;
    switch(p){
      case 0:{
      	struct Node *x=&s[k];
      	struct Node *y=&s[i];
        if((Head->id)==k){
        	x->head=y;
        	y->next=x;
        	Head=y;
		}
		else {
			y->next=x;
			y->head=x->head;
			x->head=y;
			y->head->next=y;
		}
        break;
      }
      case 1:{
        struct Node *x=&s[k];
      	struct Node *y=&s[i];
        if((Next->id)==k){
        	x->next=y;
        	y->head=x;
        	Next=y;
		}
		else {
			y->head=x;
			y->next=x->next;
			x->next=y;
			y->next->head=y;
		}
        break;
      }
    }
  }
  int m;
  cin>>m;
  while(m--){
  	int p;
  	cin>>p;
  	if(Map[p])continue;
  	Map[p]=1;
  	if(Head->id==p)Head=Head->next;
  		else {
  			if(Next->id==p){
  				s[p].head->next=s[p].next;	
  				Next=Next->head;
			}
			else {
				s[p].head->next=s[p].next;	
				s[p].next->head=s[p].head;
			}
		}
  }
  while(Head!=NULL){
  	cout<<Head->id<<' ';
  	Head=Head->next;
  }
  return 0;
}

标签:Node,head,struct,队列,安排,Head,next,int,P1160
From: https://www.cnblogs.com/fleabag/p/16978067.html

相关文章

  • Java数据结构之栈和队列
    原文链接:https://blog.csdn.net/fear_wolf/article/details/127459611文章目录一、栈(Stack)(一)概念(二)栈的使用(三)栈的模拟实现(四)问题思考1.栈,虚拟机栈,栈帧有什么区别?2.单链......
  • java 数组实现队列
     算法题用数组实现队列,三个函数,分别是添加add(),出队poll()和获取队中的元素个数getSize()当队的元素满的时候进行二倍的扩容。classmyqueue{privateint[]date;......
  • MSMQ微软消息队列的学习(先进先出)
    学习通过MSMQ发送简单类型的消息和复杂类型的消息看代码:namespaceMSMQ{classProgram{staticvoidMain(string[]args){conststrin......
  • 秒懂:JCTool 的 Mpsc 超高性能无锁队列 (史上最全+10W字长文)
    文章很长,而且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面......
  • 剑指offer 字符流中第一个不重复的字符(思维,队列)
    题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“g......
  • zookeeper和消息队列kafka
    一、Zookeeper是什么?1、Zookeeper服务集群的条件2、Zookeeper工作机制3、Zookeeper数据结构4、Zookeper特点5、Zookeeper选举机制6、Zookeeper应用场景二、Zookeepe......
  • 优先队列算法
    publicclassBinaryHeap<AnyTypeextendsComparable<?superAnyType>>{privatestaticfinalintDEFAULT_CAPACITY=10;privateintcurrentSize;privat......
  • IIS 之 连接数、并发连接数、最大并发工作线程数、队列长度、最大工作进程数
    http://t.zoukankan.com/l1pe1-p-7742936.html一、IIS连接数一般购买过虚拟主机的朋友都熟悉购买时,会限制IIS连接数,顾名思义即为IIS服务器可以同时容纳客户请求的最......
  • 迭代器源码分析【栈与队列】
      拓展:栈与队列 ......
  • 232.用栈实现队列
    232.用栈实现队列力扣题目链接(opensnewwindow)使用栈实现队列的下列操作:push(x)--将一个元素放入队列的尾部。pop()--从队列首部移除元素。peek()--返回队列......