• 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
    ",CASE++);
    
            while(scanf("%s",str)!=EOF && str[0]!='S')
            {
                if(str[0]=='E')
                {
                    int a;
                    scanf("%d",&a);
                    int belong=vis[a];
    
                    //printf("---%d
    ",head[belong]);
    
                    if(!head[belong])
                    {
                        list[listtail].next=++num;
                        listtail=num;
                        list[listtail].next=0;
                        list[num].data=a;
                        head[belong]=tail[belong]=num;
                     //   print();
                        continue;
                    }
    
                    list[++num].next=list[tail[belong]].next;
                    list[num].data=a;
                    list[tail[belong]].next=num;
    
                    if(tail[belong]==listtail)listtail=num;
    
                    quenext[tail[belong]]=num;
                    tail[belong]=num;
                }
                else
                {
                    int cur=listhead;
                    listhead=list[listhead].next;
                    int belong=vis[list[cur].data];
                    printf("%d
    ",list[cur].data);
                    head[belong]=quenext[cur];
                }
              //  print();
            }
            puts("");
        }
        return 0;
    }
    


  • 相关阅读:
    Linux pwn入门教程(1)——栈溢出基础
    Java代码审计入门篇
    利用Burp Suite攻击Web应用
    记一次对某企业的渗透测试实战
    Python 绝技 —— UDP 服务器与客户端
    SQL注入之重新认识
    文件上传和WAF的攻与防
    phpMyAdmin 4.7.x CSRF 漏洞利用
    Powershell渗透测试系列–进阶篇
    AFN检測网络情况
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5140485.html
Copyright © 2020-2023  润新知