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

所以我们先设置两个队列和一个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\n",++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<<"\n";
}
}

最新文章

  1. JavaScript如何获取网页url中的参数
  2. Codeforces CF#628 Education 8 B. New Skateboard
  3. SSIS技巧--优化数据流缓存
  4. iOS下Html页面中input获取焦点弹出键盘时挡住input解决方案—scrollIntoView()
  5. 项目中关于ajax jsonp的使用
  6. 黑马程序员_JAVA之交通灯管理系统
  7. tomcat提供文件下载
  8. android使用微软雅黑字体
  9. unity3d NGUI制作角色展示框
  10. VS2013 help viewer搜索结果显示源码以及桌面独立运行help viewer
  11. backbone collection add 事件回调参数
  12. react中的DOM操作
  13. gitlab 500 服务器错误 重启解决了
  14. redhat7.3安装python3 pip3
  15. gitlab之六: gitlab 备份恢复
  16. kudu记录-kudu原理
  17. appium 后台运行shell脚本
  18. 好用的 Chrome 插件,提升你的学习工作效率
  19. javascript数字转大写
  20. webstorm 2017 激活破解

热门文章

  1. Arduino程序-光敏电阻
  2. android音乐播放器开发 SweetMusicPlayer 智能匹配本地歌词
  3. svn 运行clear up 失败的解决的方法
  4. mysql20170407代码实现
  5. 关于三星手机调用相机返回后activity被回收的问题
  6. 关于EditText的android:maxLength属性的注意事项
  7. spring web中的filter
  8. nginx搭建基于http协议的视频点播服务器
  9. 【WIP】Bootstrap&#160;nav
  10. Java初级进阶中高级工程师必备技能