zoukankan      html  css  js  c++  java
  • 题目笔记 UVA540

    STL queue

    UVA540   AC码

    #include<queue>
    #include<map>
    #include<iostream>
    #include<cstring>
    #include<string>
    #include<set>
    using namespace std;
    
    int n,m,r,coun=0;
    string s,x,y,l;
    map <string,int> team1;
    queue<string> q[1007];
    queue<int> bigq;
    set<int>lib;
    
    int main()
    {
        while(coun>=0)
        {
            cin>>n;
            if(n==0) return 0;
            /*
            queue<string> q[n+1];
            queue<int> bigq;
            set<int>lib;
            */
            //我之前的是每次都重声明,看了官毅大佬的
            //他是把这些放在全局里
            //然后跟以下操作清空
            team1.clear();
            lib.clear();//set和map的清空
            while(!bigq.empty()) bigq.pop();
            for(int i=0;i<=n;i++)
                while(!q[i].empty()) q[i].pop();//队列清空
    
            //以上
        
            for(int i=1;i<=n;i++) 
            {
                cin>>m;
                for(int j=0;j<m;j++) 
                {
                    cin>>x;
                    team1[x]=i;
                }
            }
            coun++;
            cout<<"Scenario #"<<coun<<endl;
            while(cin>>s)
            {
                if(s[0]=='S') 
                {
                    cout<<endl;
                    break;
                }
                if(s[0]=='E') 
                {
                    cin>>y;
                    int w=team1[y];
                    if(lib.count(w)==0) 
                    {
                        bigq.push(w);
                        lib.insert(w);
                    }
                    q[w].push(y);
                }
                /*
                if(s[0]=='D') 
                {
                    r=bigq.front();
                    if(q[r].empty()) 
                    {
                        bigq.pop();
                    }              
                    r=bigq.front();//这一句上面重复,所以可以整体调整顺序(如下)
                    l=q[r].front();
                    cout<<l<<endl;
                    q[r].pop();
                    
                }
                */
               //第一次输出的有问题
                if(s[0]=='D') 
                {
                    r=bigq.front();
                    l=q[r].front();
                    cout<<l<<endl;
                    q[r].pop();
                    if(q[r].empty())
                    {
                        bigq.pop();
                        lib.erase(r);//小队列q空之后在lib中也要删除,这一点很重要
                    }   
                }
            }
        }
    }

    注意点看注释即可。

  • 相关阅读:
    springmvc,springboot单元测试配置
    uboot中ftd命令
    在根文件系统中查看设备树(有助于调试)
    协议类接口
    网络设备接口
    块设备驱动框架
    i2c子系统
    触摸屏
    input子系统
    原子访问、自旋锁、互斥锁、信号量
  • 原文地址:https://www.cnblogs.com/juuich/p/12433756.html
Copyright © 2011-2022 走看看