zoukankan      html  css  js  c++  java
  • uva 540 (Team Queue UVA

    又是一道比较复杂的模拟题。题中有两种队列,一种是总队列,从前向后。其他的是各个团体的小队列,因为入队的人如果有队友的话,会优先进入团体队列。

    所以我们先设置两个队列和一个map,设置map倒是可以不用担心开多大数组这样的问题。然后开两个队列,一个是基本的q1,另一个是q2[1010]

    一般的STL容器如string vector deque都是有两种直接初始化的方法(不严谨)一种是a(maxn)这个和一维数组差不多,直接赋给里面多少元素,另一种就是a[maxn]这个差不多是一个容器的数组,每一个a[i]代表一个容器。还可以跟string相似的用a[i][j]去寻找容器内的元素

    然后先把各个小团体放入总队列(如果团体队列里面没有其他元素),然后去除的时候就是把前面的团体队列里面的首位去除就行,输出团体队列的首位元素,如果这之后第一个团体队列没有元素,那么直接踢掉这个团体队列

    我的代码(刘汝佳算法)

    #include <bits/stdc++.h>
    //这个地方还得注意不要按照定义数组的习惯把STL容器都放到main外面,现在我还不知道怎么像memset一样清零STL容器,为此还WA。
    using namespace std;
    main()
    {
    	int n;
    	int cas=0;
    	while(cin>>n&&n)
    	{
    		map<int,int> mp;
    		for(int i=0;i<n;i++)
    		{
    			int t;
    			cin>>t;
    			while(t--)
    			{
    				int num;
    				cin>>num;
    				mp[num]=i;	
    			}	
    		}
    	queue<int> q1,q2[1010];
    	printf("Scenario #%d
    ",++cas);
    	string a;
    	while(cin>>a)
    	{
    		if(a[0]=='S')
    		break;
    		if(a[0]=='D')
    		{
    			int t=q1.front();
    			cout<<q2[t].front()<<endl;
    			q2[t].pop();
    			if(q2[t].empty())
    			q1.pop();
    		}
    		if(a[0]=='E')
    		{
    			int num;
    			cin>>num;
    			int t=mp[num];
    			if(q2[t].empty()) q1.push(t);
    			q2[t].push(num);
    		}
    	}
    	cout<<"
    ";
    }
    }
    
  • 相关阅读:
    MySql 5.6以下版本自定义函数返回VARCHAR的中文问题
    解决Tomcat的java.lang.IllegalStateException: Cannot create a session after the response has been committed问题
    Lucene自定义规则范围查询
    JS吊炸天的代码
    又是正则
    JS显示指定字符数,避免一个中文两个字符的情况
    PostgreSql查看当前表的主外键关系
    java基础(个人学习笔记) A
    Elasticsearch5.5.1插件开发指南
    ElasticSearch5.5.1插件分类
  • 原文地址:https://www.cnblogs.com/baccano-acmer/p/9803317.html
Copyright © 2011-2022 走看看