首页 > 代码库 > hdu 1387 Team Queue (链表)
hdu 1387 Team Queue (链表)
题目大意:
不同的人在不同的队伍里,插入链表的时候如果这个链表里有他的队友,就把它放到最后一个队友的最后,如果没有队友,就把它放到整个链表的最后面。
出链表的时候把第一个人拿出来。
思路分析:
要模拟这个链表就要记录这整个链表中的队伍存在的情况。
所以要再开一个链表的头指针和尾指针,在整个大的链表中再模拟小区域的链表。
然后就是deque部分,也就是注意head的判断以及更新。
#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <queue> #include <map> #define maxn 222222 using namespace std; struct node { int data,next,front; }list[maxn]; int head[1111]; int tail[1111]; int vis[1111111]; int quenext[1111111]; int listhead; int listtail; void print() { int x=listhead; while(x) { printf("%d->",list[x].data); x=list[x].next; } puts(""); } int main() { int n; int CASE=1; while(scanf("%d",&n)!=EOF && n) { memset(vis,0,sizeof vis); for(int i=1;i<=n;i++) { int t; scanf("%d",&t); for(int j=0;j<t;j++) { int a; scanf("%d",&a); vis[a]=i; } } int num=0; listhead=1; listtail=1; memset(head,0,sizeof head); memset(quenext,0,sizeof quenext); memset(tail,0,sizeof tail); char str[11]; printf("Scenario #%d\n",CASE++); while(scanf("%s",str)!=EOF && str[0]!='S') { if(str[0]=='E') { int a; scanf("%d",&a); int belong=vis[a]; //printf("---%d\n",head[belong]); if(!head[belong]) { list[listtail].next=++num; listtail=num; list[listtail].next=0; list[num].data=http://www.mamicode.com/a;>
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。