hdu 5071(2014鞍山现场赛B题,大模拟)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5071
思路:模拟题,没啥可说的,移动的时候需要注意top的变化。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int MAX_N = (5000 + 500);
struct Girl {
int priority;
__int64 words;
Girl() {}
Girl(int _priority, __int64 _words) : priority(_priority), words(_words) {}
}; struct Queue {
int len, top;
struct Girl girl[MAX_N]; void Init() {
len = 0;
top = -1;
} void Add(int u) {
int tag = 0;
for (int i = 0; i < len; ++i) {
if (girl[i].priority == u) {
tag = 1;
break;
}
}
if (tag) {
puts("same priority.");
return;
}
girl[len++] = Girl(u, 0);
puts("success.");
} void Close(int u) {
int pos = -1;
for (int i = 0; i < len; ++i) {
if (girl[i].priority == u) {
pos = i;
break;
}
}
if (pos == -1) {
puts("invalid priority.");
return;
} printf("close %d with %I64d.\n", girl[pos].priority, girl[pos].words); if (top != -1) {
if (top == pos) top = -1;
else if (top > pos) top--;
} for (int i = pos + 1; i < len; ++i) {
girl[i - 1] = girl[i];
}
--len;
} void Chat(int w) {
if (len == 0) {
puts("empty.");
return;
} puts("success."); if (top == -1) {
girl[0].words += (__int64)w;
} else
girl[top].words += (__int64)w;
} void Rotate(int x) {
if (x < 0 || x >= len) {
puts("out of range.");
return;
} puts("success.");
if (top != -1) {
if (top == x) top = 0;
else if (top < x) top++;
} Girl tmp = girl[x];
for (int i = x; i > 0; --i) girl[i] = girl[i - 1];
girl[0] = tmp;
} void Prior() {
if (len == 0) {
puts("empty.");
return;
} puts("success.");
int max_priority = -1, pos = -1;
for (int i = 0; i < len; ++i) {
if (girl[i].priority > max_priority) max_priority = girl[i].priority, pos = i;
}
if (pos > 0) {
if (top != -1) {
if (top == pos) top = 0;
else if (top < pos) top++;
} Girl tmp = girl[pos];
for (int i = pos; i > 0; --i) {
girl[i] = girl[i - 1];
}
girl[0] = tmp;
}
} void Choose(int u) {
int pos = -1;
for (int i = 0; i < len; ++i) {
if (girl[i].priority == u) {
pos = i;
break;
}
}
if (pos == -1) {
puts("invalid priority.");
return;
} puts("success.");
if (top != -1) {
if (top == pos) top = 0;
else if (top < pos) top++;
} Girl tmp = girl[pos];
for (int i = pos; i > 0; --i) girl[i] = girl[i - 1];
girl[0] = tmp;
} void Top(int u) {
int pos = -1;
for (int i = 0; i < len; ++i) {
if (girl[i].priority == u) {
pos = i;
break;
}
}
if (pos == -1) {
puts("invalid priority.");
return;
} puts("success.");
top = pos;
} void Untop() {
if (top == -1) {
puts("no such person.");
return;
} puts("success.");
top = -1;
} void Bye() {
if (top != -1 && girl[top].words > 0) {
printf("Bye %d: %I64d\n", girl[top].priority, girl[top].words);
} for (int i = 0; i < len; ++i) {
if (i != top && girl[i].words > 0) {
printf("Bye %d: %I64d\n", girl[i].priority, girl[i].words);
}
}
}
} que; int N, u, w, x;
char str[22]; int main()
{
int cas;
scanf("%d", &cas);
while (cas--) { scanf("%d", &N); que.Init(); for (int i = 1; i <= N; ++i) {
scanf("%s", str); printf("Operation #%d: ", i);
if (strcmp(str, "Add") == 0) {
scanf("%d", &u);
que.Add(u);
} else if (strcmp(str, "Close") == 0) {
scanf("%d", &u);
que.Close(u);
} else if (strcmp(str, "Chat") == 0) {
scanf("%d", &w);
que.Chat(w);
} else if (strcmp(str, "Rotate") == 0) {
scanf("%d", &x);
que.Rotate(x - 1);
} else if (strcmp(str, "Prior") == 0) {
que.Prior();
} else if (strcmp(str, "Choose") == 0) {
scanf("%d", &u);
que.Choose(u);
} else if (strcmp(str, "Top") == 0) {
scanf("%d", &u);
que.Top(u);
} else if (strcmp(str, "Untop") == 0) {
que.Untop();
}
} que.Bye();
}
return 0;
}
hdu 5071(2014鞍山现场赛B题,大模拟)的更多相关文章
- hdu 5078 2014鞍山现场赛 水题
http://acm.hdu.edu.cn/showproblem.php?pid=5078 现场最水的一道题 连排序都不用,由于说了ti<ti+1 //#pragma comment(link ...
- hdu 5078(2014鞍山现场赛 I题)
数据 表示每次到达某个位置的坐标和时间 计算出每对相邻点之间转移的速度(两点间距离距离/相隔时间) 输出最大值 Sample Input252 1 9//t x y3 7 25 9 06 6 37 6 ...
- 2014鞍山现场赛C题HDU5072(素筛+容斥原理)
Coprime Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total ...
- hdu 5112 (2014北京现场赛 A题)
给出某个时刻对应的速度 求出相邻时刻的平均速度 输出最大值 Sample Input23 // n2 2 //t v1 13 430 31 52 0 Sample OutputCase #1: 2.0 ...
- hdu 5131 (2014广州现场赛 E题)
题意:对给出的好汉按杀敌数从大到小排序,若相等,按字典序排.M个询问,询问名字输出对应的主排名和次排名.(排序之后)主排名是在该名字前比他杀敌数多的人的个数加1,次排名是该名字前和他杀敌数相等的人的个 ...
- HDU 5120 A Curious Matt(2014北京赛区现场赛A题 简单模拟)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5112 解题报告:扫一遍 #include<cstdio> #include<cstr ...
- hdu 5073 Galaxy(2014 鞍山现场赛)
Galaxy Time Limit: 2000/1000 MS (J ...
- hdu 5003 模拟水题 (2014鞍山网赛G题)
你的一系列得分 先降序排列 再按0.95^(i-1)*ai 这个公式计算你的每一个得分 最后求和 Sample Input12530 478Sample Output984.1000000000 # ...
- hdu 5120(求两个圆环相交的面积 2014北京现场赛 I题)
两个圆环的内外径相同 给出内外径 和 两个圆心 求两个圆环相交的面积 画下图可以知道 就是两个大圆交-2*小圆与大圆交+2小圆交 Sample Input22 30 00 02 30 05 0 Sam ...
随机推荐
- shiro登陆后没有返回设置的successUrl?
第一次学习shiro的时候,并没有发现很大的问题.但后来在做项目的时候,特别是当访问的url是iframe的页面的时候,session又过期了,跳转到登陆页,完成登陆操作后,返回了只有iframe的页 ...
- [日常训练]yayamao的神题
Description $yayamao$是数学神犇,一天他在纸上计算起了$1/P$, 我们知道按照模拟除法可以得到准确解,例如$1/7=0.(142857),1/10=0.1(0)$.$yayama ...
- Nginx反向代理tomcat,seesion会话保持。
proxy_pass http://10.0.0.10:8081/monitor/; proxy_cookie_path /monitor/ /; proxy_set_header Host &quo ...
- <td valign="center" align="left">
单元格对齐方式:垂直居中,水平居左.
- [NHibernate]延迟加载
目录 写在前面 文档与系列文章 延迟加载 一个例子 总结 写在前面 上篇文章介绍了多对多关系的关联查询的sql,HQL,Criteria查询的三种方式.本篇文章将介绍nhibernate中的延迟加载方 ...
- [Nhibernate]一级缓存
目录 写在前面 文档与系列文章 一级缓存 一个例子 一级缓存管理 总结 写在前面 上篇文章介绍了nhibernate中对象的三种状态,通过对象的三种状态,很容易想到缓存. 什麽是缓存? 有时候,某些数 ...
- “基础提供程序在Open上失败”
本来布置在IP为[x.x.x.x]的WCF服务好好的,但是今天突然就有问题了,一调用报错"基础提供程序在Open上失败"... 服务器上的有问题,先试试本地的服务能不能用吧,连的都 ...
- JavaScript - 对象
1.对象(Object)或实例(instance):在JavaScript中,对象则是数据与程序代码的组合,它可以是整个应用程序或整个应用程序的一部分. 2.属性(property)或字段(filed ...
- H5案例分享:html5移动开发细微之美
html5移动开发细微之美 1.H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 <meta name="viewport" content="width=dev ...
- 2.3属性在 ASP.NET Web API 2 路由
路由是 Web API 如何匹配 URI 的行动.Web API 2 支持一种新型的路由,称为属性路由.顾名思义,属性路由使用属性来定义路由.属性路由给你更多的控制 Uri 在您的 web API.例 ...