• 补番计划 (长沙理工大学第十一届程序设计竞赛)(双端队列+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个途径。一个是来自网上网友的推荐,他会把网友推荐的动漫放在队列的末尾。


    还有一种是来自现实朋友的推荐,他会把朋友推荐的动漫直接放在队列最前面。
    阿聪有时候也会在贴吧里听到有人说某部动漫一点也不好看,或者是无意中被透剧了,这个时候阿聪就会非常生气的把这部动漫从队列中删除。

    Input

    第一行有一个整数T(T<=5),表示測试组数
    接下来有T组数据
    每一组数据第一行有一个数字Q(Q<=10000)。表示这组数据中的操作数。
    接下来Q行中,分别有以下几种格式
    0
    1 [动漫名字]
    2 [动漫名字]
    3 [动漫名字]

    Output

    0表示阿聪如今要补番了,假设队列为空,则输出-1。否则取出队列的队首的动漫名字,并将它从队首中删除,假设这部动漫阿聪已经看过了, 则相同输出-1。否则输出动漫名字并换行,并标记为看过了
    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



    尽管没学过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;
    }

     

  • 相关阅读:
    Tensorflow源码解析2 -- 前后端连接的桥梁
    Tensorflow源码解析1 -- 内核架构和源码结构
    Python保存json文件并格式化
    如何在没有https环境下使用webrtc
    github提交代码不用输入账号密码的解决方案
    使用nodeJs在本地搭建最简单的服务
    ubuntu16.04 安装 nginx 服务器
    git pull和git pull --rebase的使用
    Linux 下各个目录的作用及内容
    阿里云服务器(Ubuntu16.04 64位)远程连接
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/7278240.html
Copyright © 2020-2023  润新知