hdu 5071 vector操作恶心模拟
http://acm.hdu.edu.cn/showproblem.php?pid=5071
对于每一个窗口,有两个属性:优先级+说过的单词数,支持8个操作:新建窗口,关闭窗口并输出信息,聊天(置顶窗口加单词),把优先级最高的窗口移到最前,把当前第i个窗口移到最前,把选择的窗口移到最前,把某个窗口置顶,把置顶窗口取消置顶。。。最后按优先级输出每个窗口的优先级以及单词数。。。
数据范围n<=5000…,恶心模拟
主要就是vector的操作,开始的时候没有置顶窗口记得把now置为0,注意每个参数范围为10^9,要用long long 记录单词数
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <string>
#include <queue>
#include <stack>
#include <iostream>
#include <algorithm>
using namespace std;
#define RD(x) scanf("%d",&x)
#define RD2(x,y) scanf("%d%d",&x,&y)
#define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define clr0(x) memset(x,0,sizeof(x))
typedef long long LL;
typedef pair<int,LL> p2;
vector<p2> p;
int find(int x)
{
for(int i = 0;i < p.size();++i)
if(p[i].first == x)
return i;
return -1;
}
void erase(int x)
{
int i = 0;
for(vector<p2>::iterator it = p.begin();it != p.end();it++,i++){
if(i == x){
p.erase(it);return;
}
}
}
int x,now;
void Add()
{
RD(x);
if(-1 != find(x))
puts("same priority.");
else{
p.push_back(make_pair(x,0));
puts("success.");
}
}
void Close()
{
RD(x);
int cl = find(x);
if(cl == -1)
puts("invalid priority.");
else{
if(x == now)
now = 0;
printf("close %d with %I64d.\n",p[cl].first,p[cl].second);
erase(cl);
}
}
void Chat()
{
RD(x);
if(0 == p.size())
puts("empty.");
else{
if(now)
p[find(now)].second += x;
else
p[0].second += x;
puts("success.");
}
}
void Rotate(int y)
{
if(y < 1 || y > p.size())
puts("out of range.");
else{
p2 erase_p = p[y - 1];
erase(y - 1);
p.insert(p.begin(),erase_p);
puts("success.");
}
}
void Prior()
{
int mx = 0,mx_i = -1;
if(p.size() == 0)
puts("empty.");
else{
for(int i = 0;i < p.size();++i)
if(p[i].first > mx)
mx = p[i].first , mx_i = i;
Rotate(mx_i + 1);
}
}
void Choose()
{
RD(x);
int ch = find(x);
if(ch == -1)
puts("invalid priority.");
else
Rotate(ch + 1);
}
void Top()
{
RD(x);
if(find(x) == -1)
puts("invalid priority.");
else
now = x,puts("success.");
}
void Untop()
{
if(now)
now = 0,puts("success.");
else
puts("no such person.");
}
void Bye()
{
if(now){
x = find(now);
if(p[x].second != 0)
printf("Bye %d: %I64d\n",p[x].first,p[x].second);
erase(x);
}
for(int i=0; i<p.size(); ++i)
if(p[i].second)
printf("Bye %d: %I64d\n",p[i].first,p[i].second);
}
int main() {
string op;
int _,y,n;RD(_);while(_--){
now = 0;
RD(n);
p.clear();
for(int cas = 1;cas <= n;++cas){
cin>>op;
printf("Operation #%d: ",cas);
if(op=="Add")
Add();
else if(op=="Close")
Close();
else if(op=="Chat")
Chat();
else if(op=="Rotate")
RD(y),Rotate(y);
else if(op=="Prior")
Prior();
else if(op=="Choose")
Choose();
else if(op=="Top")
Top();
else if(op=="Untop")
Untop();
}
Bye();
}
return 0;
}
hdu 5071 vector操作恶心模拟的更多相关文章
- hdu 5071 Chat(模拟)
题目链接:hdu 5071 Chat 题目大意:模拟题. .. 注意最后说bye的时候仅仅要和讲过话的妹子说再见. 解题思路:用一个map记录每一个等级的妹子讲过多少话以及是否有这个等级的妹子.数组A ...
- hdu 4930 斗地主恶心模拟
http://acm.hdu.edu.cn/showproblem.php?pid=4930 就是两个人玩斗地主,有8种牌型,单张,一对,三张,三带一,三带对,四带二,四炸,王炸.问先手能否一次出完牌 ...
- HDU - 5071 Chat(模拟)
原题链接 题意:有各种操作,模拟这个程序并输出每次操作的信息 分析:恶心模拟题...用个map记录一下各个等级女孩的谈话数,同时也便于查找权值为u的在不在队列里.因为n很小,其他就暴力模拟了. #in ...
- HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011亚洲北京赛区网络赛)
HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011 亚洲北京赛区网络赛题目) Eliminate Witches! Time Limit: 2000/1000 ...
- 向量容器vector操作
1.向量容器vector 1.1 vector说明 进行vector操作前应添加头文件#include<vector>: vector是向量类型,可以容纳许多类型的数据,因此也被称为容器: ...
- L3-002 特殊堆栈 (30分) vector容器的模拟、vector容器的一些用法
vector容器的简单应用,我们可以用vector维护一个有序数组,每次对要插入的数用upper_bound或者lower_bound来 为这个数找一个应该插入到vector的位置.另外再找一个数组来 ...
- HDU 5071 Chat(2014鞍山B,模拟)
http://acm.hdu.edu.cn/showproblem.php?pid=5071 Chat Time Limit: 2000/1000 MS (Java/Others) Memory ...
- hdu 4964 恶心模拟
http://acm.hdu.edu.cn/showproblem.php?pid=4964 给定语句,按照语法翻译html并输出. 就是恶心的模拟,递归搞就行了 处理id和class时,在一个'&g ...
- hdu 5071(2014鞍山现场赛B题,大模拟)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5071 思路:模拟题,没啥可说的,移动的时候需要注意top的变化. #include <iostr ...
随机推荐
- Activity和Intent
- javascript 高级程序设计 十一
接上一节的创建对象的模式: 原型模式: 对于prototype的理解:我们创建的函数都有一个prototype(原型)属性,这个属性是一个指针指向一个对象,而这个对象的用途是包含基于这个方法的 所有的 ...
- UIButton 设置图片文字垂直居中排列
#pragma mark 按钮图片文字垂直居中排列 -(void)setButtonContentCenter:(UIButton *)button { CGSize imgViewSize,titl ...
- php中static静态关键字的使用方法和应用场景
php中除了常规类和方法的使用,访问控制之外,还有静态关键字static,静态变量可以是局部变量也可以是全局变量,当一个程序段执行完毕时,静态变量并没有消失,它依然存在于内存中,下次在定义时还是以前的 ...
- sleep()方法和yield()方法有什么区别?
两者都是Thread类的静态方法,定义如下 public static void sleep(long millis) throws InterruptedException public stati ...
- 2018年设计师都在用的PS切图插件--摹客iDoc
终于找到你,我梦寐以求的PS切图插件.曾几何时,设计师在完成设计稿之后高效的输出标注切图一直是设计师的噩梦.为什么这么说呢?开发要的那么多尺寸,我到底该怎么切图?iPhone的版本已经不少了,更别提安 ...
- mysql Error_code: 1593
mysql slave_IO_running no 查看data目录下的.err文件提示:mysql Error_code: 1593 解决方法: 1.检查 data目录下auto.cnf 文件中 ...
- 利用PHP脚本辅助MySQL数据库管理2-表主键表索引
<?php $dbi = new DbMysql; $dbi->dbh = 'mysql://root:mysql@127.0.0.1/coffeetest'; $map = array( ...
- Oracle12c的卸载
之前电脑装了Oracle12c 现在希望删除重新安装: 参照教程: http://jingyan.baidu.com/article/642c9d34e1cbdd644a46f7de.html E:\ ...
- zk实现分布式锁
public interface lock { void getLock(); void unLock(); } public abstract class ZkAbstractLock implem ...