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 ...
随机推荐
- [C#] 图文解说调用WebServer实例
本文旨在实现如何在.NET环境下调用WebServer,以天气接口为例进行说明. WebServer地址:http://www.webxml.com.cn/WebServices/WeatherWeb ...
- IE浏览器不能访问网页,google可以访问
现象:google浏览器可以进行网络访问,ie不能访问 原因:代理服务修改了局域网配置脚本 解决: Internet选项---连接---局域网设置: 去除勾选 “使用自动配置脚本”
- java--HashMap多线程并发问题分析
并发问题的症状 多线程put后可能导致get死循环 从前我们的Java代码因为一些原因使用了HashMap这个东西,但是当时的程序是单线程的,一切都没有问题.后来,我们的程序性能有问题,所以需要变成多 ...
- PHP Ajax 跨域问题最佳解决方案
本文通过设置Access-Control-Allow-Origin来实现跨域. 例如:客户端的域名是client.runoob.com,而请求的域名是server.runoob.com. 如果直接使用 ...
- 自学 Java 怎么入门
自学 Java 怎么入门? 595赞同反对,不会显示你的姓名 给你推荐一个写得非常用心的Java基础教程:java-basic | 天码营 这个教程将Java的入门基础知识贯穿在一个实例中,逐 ...
- MyBatis源码分析(1)——整体依赖关系图
后续补充更新
- 深入理解redis持久化
持久化方式: 快照(RDB)方式,默认方式,文件以二进制方式保存到RDB文件. 文件追加(AOF)方式,文件以协议文本的方式write到AOF文件. 作用,重启后的数据恢复.当两种方式都启用时,red ...
- 【转】Controllers and Routers in ASP.NET MVC 3
Controllers and Routers in ASP.NET MVC 3 ambilykk, 3 May 2011 CPOL 4.79 (23 votes) Rate: vote 1vote ...
- linux用命令删除重复行
文本处理时,经常要删除重复行,下面是三种方法 第一,用sort+uniq,注意,单纯uniq是不行的. sort -n test.txt | uniq 第二,用sort+awk命令,注意,单纯awk同 ...
- 在JS中关于堆与栈的认识function abc(a){ a=100; } function abc2(arr){ arr[0]=0; }
平常我们的印象中堆与栈就是两种数据结构,栈就是先进后出:堆就是先进先出.下面我就常见的例子做分析: main.cpp int a = 0; 全局初始化区 char *p1; 全局未初始化区 main( ...