补番计划 (长沙理工大学第十一届程序设计竞赛)(双端队列+set容器+string)
Posted gccbuaa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了补番计划 (长沙理工大学第十一届程序设计竞赛)(双端队列+set容器+string)相关的知识,希望对你有一定的参考价值。
补番计划
Time Limit : 4000/2000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 8 Accepted Submission(s) : 1
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
阿聪是一个日漫狂魔。暑假在家的时候,他有12小时在补番。12小时在睡觉。
可是动漫的质量有好有坏,选择看哪一部动漫一直都是一个问题。
于是。他做了一个补番的队列。每一次当他完结某部动漫后,他会选择队列最前面的那部动漫观看,并从队首删除。
阿聪想补的番通常有2个途径。一个是来自网上网友的推荐,他会把网友推荐的动漫放在队列的末尾。
可是动漫的质量有好有坏,选择看哪一部动漫一直都是一个问题。
于是。他做了一个补番的队列。每一次当他完结某部动漫后,他会选择队列最前面的那部动漫观看,并从队首删除。
阿聪想补的番通常有2个途径。一个是来自网上网友的推荐,他会把网友推荐的动漫放在队列的末尾。
还有一种是来自现实朋友的推荐,他会把朋友推荐的动漫直接放在队列最前面。
阿聪有时候也会在贴吧里听到有人说某部动漫一点也不好看,或者是无意中被透剧了,这个时候阿聪就会非常生气的把这部动漫从队列中删除。
Input
第一行有一个整数T(T<=5),表示測试组数
接下来有T组数据
每一组数据第一行有一个数字Q(Q<=10000)。表示这组数据中的操作数。
接下来Q行中,分别有以下几种格式
0
1 [动漫名字]
2 [动漫名字]
3 [动漫名字]
接下来有T组数据
每一组数据第一行有一个数字Q(Q<=10000)。表示这组数据中的操作数。
接下来Q行中,分别有以下几种格式
0
1 [动漫名字]
2 [动漫名字]
3 [动漫名字]
Output
0表示阿聪如今要补番了,假设队列为空,则输出-1。否则取出队列的队首的动漫名字,并将它从队首中删除,假设这部动漫阿聪已经看过了, 则相同输出-1。否则输出动漫名字并换行,并标记为看过了
1表示网友推荐阿聪了一部动漫。阿聪把这部动漫增加到了队列末尾
2表示朋友推荐阿聪了一部动漫。阿聪把这部动漫增加到了队列首端
3表示阿聪不想看这部动漫了,他会从队列中删除全部这部动漫的(仅仅会删除在这个操作之前已存在队列中的,并不会影响后面的操作)
注意动漫名字都是用[]括起来的。名字中仅仅含有下划线数字字母并区分大写和小写,且2<=动漫名字长度<=50
1表示网友推荐阿聪了一部动漫。阿聪把这部动漫增加到了队列末尾
2表示朋友推荐阿聪了一部动漫。阿聪把这部动漫增加到了队列首端
3表示阿聪不想看这部动漫了,他会从队列中删除全部这部动漫的(仅仅会删除在这个操作之前已存在队列中的,并不会影响后面的操作)
注意动漫名字都是用[]括起来的。名字中仅仅含有下划线数字字母并区分大写和小写,且2<=动漫名字长度<=50
Sample Input
2 7 0 1 [Sword_Art_Online] 1 [Your_Lie_in_April] 2 [sakura_sou_no_pet_na_kanojo] 0 0 0 6 1 [Your_Lie_in_April] 1 [Your_Lie_in_April] 2 [Is_the_order_a_rabbit] 3 [Is_the_order_a_rabbit] 0 0
Sample Output
-1 sakura_sou_no_pet_na_kanojo Sword_Art_Online Your_Lie_in_April Your_Lie_in_April -1
php?
cid=29617&pid=1004" style="color:rgb(26,92,200); text-decoration:none">Statistic | Submit | Back
尽管没学过c++ 。
。
感觉应该和java差点儿相同。。。
题意中由于要从队尾 队首增加 所以选用---------------------双端队列
为了推断是否看过某番 。为了番名的唯一性----------------set容器
剩下的就是模拟了
#include <iostream> #include <string.h> #include <stdio.h> #include <queue> #include <set> using namespace std; int main() { set<string>s; deque<string>q; int ncase,n; scanf("%d",&ncase); while(ncase--) { s.clear(); while(!q.empty()) q.pop_back(); cin>>n; for(int i=0;i<n;i++) { int x; cin>>x; if(x==0) { if(!q.empty()) { string x1=q.front();q.pop_front(); if(s.find(x1)==s.end()) { cout<<x1<<endl; s.insert(x1); } else { cout<<-1<<endl; } } else { cout<<-1<<endl; } } if(x==1) { string x2; cin>>x2; q.push_back(x2.substr(1,x2.length()-2)); } if(x==2) { string x2; cin>>x2; q.push_front(x2.substr(1,x2.length()-2)); } if(x==3) { string x2; cin>>x2; x2=x2.substr(1,x2.length()-2); int count=q.size(); while(count--) { string x3=q.front();q.pop_front(); if(x3.compare(x2)!=0) { q.push_back(x3); } } } } } return 0; }
以上是关于补番计划 (长沙理工大学第十一届程序设计竞赛)(双端队列+set容器+string)的主要内容,如果未能解决你的问题,请参考以下文章