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 ...
随机推荐
- 64位centos下安装python的PIL模块
http://blog.csdn.net/xiaojun1288/article/details/8673529
- zabbix 3.0快速安装简介(centos 7)
zabbix快速安装 系统版本:centos 7 通过yum方法安装Zabbix3.0,安装源为阿里云 yum源配置 rpm -ivh http://mirrors.aliyun.com/zabbix ...
- BZOJ3160: 万径人踪灭
设a[i]=bool(s[i]=='a'),b[i]=bool(s[i]=='b'),考虑a和a.b和b的卷积,由于卷积是对称的,就可以统计出不连续回文子串个数了.可能说得比较简略.再用manache ...
- try throw catch
#include "stdafx.h" #include <iostream> #include <stdlib.h> using namespace st ...
- cmake 编译 c++ dll 的一个例子(更新2:增加 python 调用方法)
CMakeLists.txt project(xxx) add_library(xxx SHARED xxx.cpp) add_executable(yyy yyy.cpp) target_link_ ...
- CSS3 让图片镜像对称
1.HTML代码 <!DOCTYPE html> <html> <head> <title>test</title> </head&g ...
- Autofac.Integration.Mvc.Owin分析
using System; using System.ComponentModel; using System.Diagnostics.CodeAnalysis; using System.Secur ...
- SSL/TLS加密传输与数字证书解读
什么是ssl? secure socket layer(ssl)协议最初由netscape企业发展,现已成为网络用来鉴别网站和网页浏览者身份,以及在浏览器使用者及网页服务器之间进行加密通讯的全球化标准 ...
- mysql 数据表中查找、删除重复记录
为了性能考虑,在阅读之前提醒大家,如果有子查询,子查询查询到的数据最好不要超过总数据量的30%. 查询有重复数据的记录 select * from F group by a,b,c,d having ...
- 【转载】 C中的access函数
分类: C/C++ int access(const char *filename, int amode); amode参数为0时表示检查文件的存在性,如果文件存在,返回0,不存在 ...