题目链接: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题)的更多相关文章

  1. HDU 5073 Galaxy(2014鞍山赛区现场赛D题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5073 解题报告:在一条直线上有n颗星星,一开始这n颗星星绕着重心转,现在我们可以把其中的任意k颗星星移 ...

  2. HDU 5074 Hatsune Miku(2014鞍山赛区现场赛E题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5074 解题报告:给出一个长度为n的序列,例如a1,a2,a3,a4......an,然后这个序列的美丽 ...

  3. HDU 5120 Intersection(2014北京赛区现场赛I题 计算几何)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5120 解题报告:给你两个完全相同的圆环,要你求这两个圆环相交的部分面积是多少? 题意看了好久没懂.圆环 ...

  4. HDU 5071 Chat(2014鞍山B,模拟)

    http://acm.hdu.edu.cn/showproblem.php?pid=5071 Chat Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  5. HDU 5128 The E-pang Palace(2014广州赛区现场赛B题 计算几何)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5128 解题报告:在一个平面上给出n个点的坐标,用这n个点作为矩形的四个顶点,作两个矩形,要求两个矩形不 ...

  6. HDU 5120 A Curious Matt(2014北京赛区现场赛A题 简单模拟)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5112 解题报告:扫一遍 #include<cstdio> #include<cstr ...

  7. 2014 ACM/ICPC 鞍山赛区现场赛 D&amp;I 解题报告

    鞍山现场赛结束了呢-- 我们出的是D+E+I三道题-- 吾辈AC掉的是D和I两道,趁着还记得.先在这里写一写我写的两道水题D&I的解题报告吧^_^. D题的意思呢是说星云内有一堆排成一条直线的 ...

  8. HDU 4816 Bathysphere (2013长春现场赛D题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4816 2013长春区域赛的D题. 很简单的几何题,就是给了一条折线. 然后一个矩形窗去截取一部分,求最 ...

  9. 2014ACM/ICPC亚洲区鞍山赛区现场赛1009Osu!

    鞍山的签到题,求两点之间的距离除以时间的最大值.直接暴力过的. A - Osu! Time Limit:1000MS     Memory Limit:262144KB     64bit IO Fo ...

随机推荐

  1. f

     module.exports = util; }); 除了define之外,我们看到module.exports = util;这一句比较特殊.这句是在说,我util模块向外暴露的接口就这些,其他所 ...

  2. juqery 实现商城循环倒计时

    <html> <hand> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jqu ...

  3. UrlEncode编码/UrlDecode解码 - 站长工具

    http://tool.chinaz.com/tools/urlencode.aspx

  4. SQL语句注入

    1:       select *from user where username='admin' and password='123456'  or 1='1';    万能密码 2:       ...

  5. 中缀表达式转后缀表达式(用于求字符串表达式值)(js栈和队列的实现是通过数组的push和unshift方法插值,pop方法取值)

    中缀表达式:就是我通常用的算术或逻辑公式: 后缀表达式:不包含括号,运算符放在两个运算对象后面,所有的计算按运算符出现的顺序,严格从左向右进行,不用考虑运算符优先级: 如,(2+1)*3 转换后,2 ...

  6. ecshop目录结构

    ECShop 最新程序 的结构图及各文件相应功能介绍ECShop文件结构目录┣ activity.php 活动列表┣ affiche.php 广告处理文件┣ affiliate.php 生成商品列表┣ ...

  7. Nancy总结(一)Nancy一个轻量的MVC框架

    Nancy是一个基于.net 和Mono 构建的HTTP服务框架,是一个非常轻量级的web框架. 设计用于处理 DELETE, GET, HEAD, OPTIONS, POST, PUT 和 PATC ...

  8. iOS静态库小结--(yoowei)

    准备知识: 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.根据源代码的公开情况,库可以分为2种类型 a.开源库 公开源代码,能看到具体实现 ,比如SDWebImage.AFNetw ...

  9. SSH+Ext+mysql快速开发

    一.需要知识点 1.SSH整合 2.EXT使用 以及深入细节点 二.小功能实现 1.Servlet实现校验码验证 2.首页布局实现 3.struts错误信息显示(struts标签使用) 4.首页整体布 ...

  10. org.apache.commons.lang.StringUtils中常用的方法

    org.apache.commons.lang.StringUtils中常用的方法,这里主要列举String中没有,且比较有用的方法: 1. 检查字符串是否为空: static boolean isB ...