HDU 5071 Chat(2014鞍山赛区现场赛B题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5071
解题报告:一个管理聊天窗口的程序,一共有八种操作,然后要注意的就是Top操作只是把编号为u的窗口标记为一种特殊的状态,在这种特殊的状态下优先级是最高的,聊天都是跟这个聊,而这个窗口并没有在实际上被提到最前面.还有就是每句后面都有句号.我本来可以1A的,但就是因为没看这个,所以一直WA也找不到原因.
暴力模拟就可以了,因为点最多只有5000个,不会超时,维护一个队列就可以了,但我为了方便判断是不是已经存在还用了一个map容器.
- #include<cstdio>
- #include<cstring>
- #include<iostream>
- #include<algorithm>
- #include<map>
- #include<set>
- #include<deque>
- using namespace std;
- deque<int> que;
- deque<int>::iterator iter;
- map<int,int> mp;
- int T,n,x,top,istop;
- void Add()
- {
- scanf("%d",&x);
- if(mp[x] == )
- {
- que.push_back(x);
- mp[x] = -; //因为map查找没有时返回是0,为了避免冲突,初始化为-1
- puts("success.");
- }
- else puts("same priority.");
- }
- void Close()
- {
- scanf("%d",&x);
- if(mp[x] )
- {
- if(mp[x] > ) printf("close %d with %d.\n",x,mp[x]);
- else printf("close %d with 0.\n",x);
- if(istop && top == x) istop = ; // 关掉always状态的就要把这个标记取消掉,不然会出错,但是注释掉也过了,说明没有关掉always状态的操作
- //但个人觉得还是加上比较好,因为这个操作可以关掉一切存在的 窗口,不加这个可以过就是测试数据的问题了
- for(iter = que.begin();iter != que.end();++iter)
- if(*iter == x)
- {
- que.erase(iter);
- break;
- }
- mp.erase(x);
- }
- else puts("invalid priority.");
- }
- void Chat()
- {
- scanf("%d",&x);
- int t;
- if(que.empty())
- {
- puts("empty.");
- return ;
- }
- if(istop) t = top; //如果存在always top
- else t = *que.begin();
- if(mp[t] == -) mp[t] = x;
- else mp[t] += x;
- puts("success.");
- }
- void Rotate()
- {
- scanf("%d",&x);
- if(x > que.size())
- {
- puts("out of range.");
- return ;
- }
- int t = x - ;
- iter = que.begin();
- while(t--) iter++;
- t = *iter;
- que.erase(iter);
- que.push_front(t);
- puts("success.");
- }
- void Prior()
- {
- if(que.empty())
- {
- puts("empty.");
- return ;
- }
- deque<int>::iterator M = que.begin();
- for(iter = que.begin();iter != que.end();++iter)
- if(*M < *iter) M = iter;
- int t = *M;
- que.erase(M);
- que.push_front(t);
- puts("success.");
- }
- void Choose()
- {
- scanf("%d",&x);
- if(mp[x] == )
- {
- puts("invalid priority.");
- return ;
- }
- for(iter = que.begin();iter != que.end();++iter)
- if(*iter == x)
- break;
- que.push_front(x);
- que.erase(iter);
- puts("success.");
- }
- void Top()
- {
- scanf("%d",&x);
- if(mp[x] == )
- {
- puts("invalid priority.");
- return ;
- }
- istop = ;
- top = x;
- puts("success.");
- }
- void Untop()
- {
- if(istop == )
- {
- puts("no such person.");
- return ;
- }
- istop = ;
- puts("success.");
- }
- int main()
- {
- // freopen("in","r",stdin);
- char oper[];
- scanf("%d",&T);
- while(T--)
- {
- scanf("%d",&n);
- mp.clear();
- que.clear();
- istop = ; //是否存在top
- int kase = ;
- while(n--)
- {
- scanf("%s",oper);
- printf("Operation #%d: ",kase++);
- if(!strcmp(oper,"Add")) Add();
- else if(!strcmp(oper,"Close")) Close();
- else if(!strcmp(oper,"Chat")) Chat();
- else if(!strcmp(oper,"Rotate")) Rotate();
- else if(!strcmp(oper,"Prior")) Prior();
- else if(!strcmp(oper,"Choose")) Choose();
- else if(!strcmp(oper,"Top")) Top();
- else if(!strcmp(oper,"Untop")) Untop();
- }
- if(istop != && mp[top] > )
- {
- printf("Bye %d: %d\n",top,mp[top]);
- mp.erase(top);
- for(iter = que.begin();iter != que.end();++iter)
- if(*iter == top) break;
- que.erase(iter);
- }
- while(!que.empty())
- {
- if(mp[*que.begin()] > )
- printf("Bye %d: %d\n",*que.begin(),mp[*que.begin()]);
- mp.erase(*que.begin());
- que.pop_front();
- }
- }
- return ;
- }
HDU 5071 Chat(2014鞍山赛区现场赛B题)的更多相关文章
- HDU 5073 Galaxy(2014鞍山赛区现场赛D题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5073 解题报告:在一条直线上有n颗星星,一开始这n颗星星绕着重心转,现在我们可以把其中的任意k颗星星移 ...
- HDU 5074 Hatsune Miku(2014鞍山赛区现场赛E题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5074 解题报告:给出一个长度为n的序列,例如a1,a2,a3,a4......an,然后这个序列的美丽 ...
- HDU 5120 Intersection(2014北京赛区现场赛I题 计算几何)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5120 解题报告:给你两个完全相同的圆环,要你求这两个圆环相交的部分面积是多少? 题意看了好久没懂.圆环 ...
- HDU 5071 Chat(2014鞍山B,模拟)
http://acm.hdu.edu.cn/showproblem.php?pid=5071 Chat Time Limit: 2000/1000 MS (Java/Others) Memory ...
- HDU 5128 The E-pang Palace(2014广州赛区现场赛B题 计算几何)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5128 解题报告:在一个平面上给出n个点的坐标,用这n个点作为矩形的四个顶点,作两个矩形,要求两个矩形不 ...
- HDU 5120 A Curious Matt(2014北京赛区现场赛A题 简单模拟)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5112 解题报告:扫一遍 #include<cstdio> #include<cstr ...
- 2014 ACM/ICPC 鞍山赛区现场赛 D&I 解题报告
鞍山现场赛结束了呢-- 我们出的是D+E+I三道题-- 吾辈AC掉的是D和I两道,趁着还记得.先在这里写一写我写的两道水题D&I的解题报告吧^_^. D题的意思呢是说星云内有一堆排成一条直线的 ...
- HDU 4816 Bathysphere (2013长春现场赛D题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4816 2013长春区域赛的D题. 很简单的几何题,就是给了一条折线. 然后一个矩形窗去截取一部分,求最 ...
- 2014ACM/ICPC亚洲区鞍山赛区现场赛1009Osu!
鞍山的签到题,求两点之间的距离除以时间的最大值.直接暴力过的. A - Osu! Time Limit:1000MS Memory Limit:262144KB 64bit IO Fo ...
随机推荐
- Fix failed to start session in Ubuntu
When you are at login, press Ctrl+Alt+F1. It will take you to command line interface from the GUI. I ...
- MySql视图、存储过程、函数、索引
一.视图 视图是查询命令结果构成的一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集合,并可以当作表来查询使用. 1创建视图 - ...
- Django admin美化插件suit
Django Suit 效果 使用前django页面 使用后django页面 安装 官方文档 http://django-suit.readthedocs.io/en/develop/index.ht ...
- omnet++5.0安装使用
1.下载Windows安装包,5.0的omnetpp-5.0-src-windows.zip 2.解压到d盘 3.D:\omnetpp-5.0\doc找到这个目录,下面有个InstallGuide.p ...
- XmlHttpRequest对象的获取及相关操作
一.获取XMLHttpRequest对象 方案一: function ajaxFunction(){ var xmlHttp; try{ // Firefox, Opera 8.0+, Safari ...
- css007 margin padding border
css007 margin padding border 1.理解盒模型(盒模型:就是把一些东西,包括html各种标签都包含在一个 看不见的盒子里) 1/在web浏览器中任何标签都是一个盒子,内容的周 ...
- orancle的安装和配置
1.安装 Oracle 版本:Oracle Database 10g Release 2 (10.2.0.1) 下载地址: http://www.oracle.com/technology/softw ...
- Java数据结构——链表-单链表
<1>链表 <2>引用和基本类型 <3>单链表 //================================================= // Fil ...
- Using Flash Builder with Flash Professional
http://help.adobe.com/en_US/flashbuilder/using/WSc5cd04c102ae3e97-6e5d439512e1414e588-8000.html
- xcopy
xcopy "$(ProjectDir)Admin" "$(SolutionDir)模块\CanDoo.Admin.WebHost\Admin" /e/h ...