题意
- 有一个数据结构,能执行三种命令:getMin x,removeMin,insert x。
- 现有一些随机的命令,补全这些命令使所有的命令合法,并且最终的命令数最少。
题目分析
- 这个数据结构可以用优先队列实现
- insert x永远是合法的命令。removeMin在数据结构为空时不合法,不合法时,我们可以先插入一个任意数使它合法。
- getMin会在数据空,第一个数比它大,第一个数比它小时不合法。分情况解决
注意
- 这道题我runtimeError了很久。
- 要特别注意RE,有两种常发生的re的情况。一种情况是数组越界,要么数组开小了,要么程序写错了。
- 另一种情况是容器类,在pop,top这种操作前一定要检查容器是否空。
输出
- 这道题输出有点麻烦,得先把输出结果都存储下来,最后再一并输出才行。这里有两种方法。两种方法都得用到sprintf()
- 一是用vector<string>保存结果,直接用size(),一并输出。
- 另一种是用一个超长字符串,手动记录命令个数,手动维护超长字符串的指针。
#include<cstdio>
#include<queue>
#include<vector>
#include<string>
#include<iostream>
#include<cstring>
using namespace std;
char op[30];
char tmp[30];
int oprand;
vector<string> log;
priority_queue<int,vector<int>,greater<int> > q;