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 ...
随机推荐
- js数组特定位置元素置空,非null和undefined,实现echarts现状图效果;谷歌格式化压缩js代码
一.想要实现eCharts线状图表的断点效果,如图(后来又查到数据格式为data:['-', 2, 3,'-' , 5, 6, 7]:也可以断点显示) 这种效果,在设置数据的时候应该是这样: data ...
- Linux 命令小记
1. pidof 进程名 :获取进程的pid,例如 pidof memcached 得到5333 2. unset Shell变量 :取消设置一个shell变量,从内存和shell的导出环境中删除它, ...
- TeXmacs - 所见即所得 - 专业排版软件
所见即所得,支持中文,很好用, 容易奔溃,奔溃进入不了程序时,删除文件夹 C:\Users\Perelman\AppData\Roaming\TeXmacs
- Struct Member Default Value
在C#中struct是值类型的数据类型,其默认值相当于调用了无参数默认构造函数之后的值.这也许就是struct不允许重载无参数默认构造函数的原因. https://msdn.microsoft.com ...
- echosp 销量排行 新增实际价格
找到lib_goods.php第147行,代码 $sql = 'SELECT g.goods_id, g.goods_name, g.shop_price,g.goods_thumb, SUM(og. ...
- Nancy总结(二)记一次Nancy 框架中遇到的坑
记一次Nancy 框架中遇到的坑 前几天,公司一个项目运行很久的Nancy框架的网站,遇到了一个很诡异的问题.Session 对象跳转到另外一个页面的时候,session对象被清空了,导致用户登录不上 ...
- MYSQL 免安装版(windows 7/64)
本文介绍在本地安装MYSQL数据库,免安装版相关配置 一.下载 mysql下载地址1:http://dev.mysql.com/downloads/mysql/ 二.解压MySQL压缩包 将已下载的M ...
- Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署发布
FastCGI编程包括四部分:初始化编码.接收请求循环.响应内容.响应结束循环. FCGX_Request request; FCGX_Init(); ); FCGX_InitRequest(& ...
- Python操作Redis、Memcache、RabbitMQ、SQLAlchemy
Python操作 Redis.Memcache.RabbitMQ.SQLAlchemy redis介绍:redis是一个开源的,先进的KEY-VALUE存储,它通常被称为数据结构服务器,因为键可以包含 ...
- SqlServer 18456 错误解决方案
sqlserver 安装需注意事项: 不要选择,否则运行一段时间后sqlserver登录时会出现18456错误. 发生18456错误(sa 可登录的情况下)解决本地用户登录问题的方案: <1& ...