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 ...
随机推荐
- php 读取csv 乱码
在php手册里面有这样一个例子,为什么读出的是乱码<?php$row = 1;$handle = fopen("test.csv","r");while ...
- hihoCoder 后缀数组 重复旋律
#1403 : 后缀数组一·重复旋律 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为长度为 N 的数构成 ...
- Jstat PID not found
解决步骤 删除/tmp/hsperfdata_{USER}文件夹,如果是root用户登录,即为/tmp/hsperfdata_root 通过chown.chmod命令保证执行jstat用户必定拥有对/ ...
- gulp删除文件和文件夹
使用模块:del,npm install --save-dev gulp del var gulp = require('gulp'); var del = require('del'); gulp. ...
- 关于Scala的一些感想(一)
最近在完成自己的开源项目Application-center的时候,使用了Scala编程语言. 在使用了一段时间下来以后,有一些不是很"清晰"的感受,说实话我自己还没有很好的整理清 ...
- CocoaPods第三方库管理 iOS
越来越多的SVN管理,越来越多的工程文件,我不能总是那么一个一个的把第三方库拖进去,我厌倦了拖拽和配置,我找到了替代方法--CocoaPods 补充一下:最近在给新机子安装时 发现 sudo gem ...
- WPF DataGrid绑定到数据源的方法
string conStr = System.Configuration.ConfigurationManager.ConnectionStrings["str"].Connect ...
- 外景VR的应用
留坑,续写. 最近在做外景的项目,被相关的帧率优化和灯光布置困扰的不要不要的.下面写下我是怎么优化帧率和对帧率的一些理解. 帧率,游戏的重要影响因素,会对玩家的手感以及视觉产生重大的影响,一般的游戏帧 ...
- sql clear dblog
USE [master]GOALTER DATABASE ndFlightPolicy SET RECOVERY SIMPLE WITH NO_WAITGOALTER DATABASE ndFligh ...
- 苹果微信下载 iOS微信各版本列表
微信在不断地更新迭代,ios微信下载点击这里立即开始(手机电脑都可以,电脑端要安装iTunes),每个版本都放出一些新的功能或修复相关错误,详情可以点击下面的版本链接进行查看.(这里有Android微 ...