CodeForces 681C Heap Operations(模拟)

  比较简单的模拟,建议使用STL优先队列。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
#define N 1000010
char outs[N][20];
int outn[N];
priority_queue<int,vector<int>,greater<int> >que;
int main()
{
    int n,num;
    int tot = 0;
    while(!que.empty()) que.pop();
    char op[20];
    scanf("%d",&n);
    getchar();
    while(n--)
    {
        scanf("%s",op);
        if(!strcmp(op,"insert"))
        {
            scanf("%d",&num);
            strcpy(outs[tot],op);
            outn[tot++] = num;
            que.push(num);
        }
        else if(!strcmp(op,"removeMin"))
        {
            if(que.empty())
            {
                strcpy(outs[tot],"insert");
                outn[tot++] = 0;
                que.push(0);
            }
            strcpy(outs[tot],op);
            outn[tot++] = -1;
            que.pop();
        }
        else if(!strcmp(op,"getMin"))
        {
            scanf("%d",&num);
            bool have = false;
            while(!que.empty())
            {
                int tmp = que.top();
                if(tmp < num)
                {
                    strcpy(outs[tot],"removeMin");
                    outn[tot++] = -1;
                    que.pop();
                }
                if(tmp == num)
                {
                    have = true;
                    break;
                }
                if(tmp > num) break;
            }
            if(!have)
            {
                strcpy(outs[tot],"insert");
                outn[tot++] = num;
                que.push(num);
            }
            strcpy(outs[tot],"getMin");
            outn[tot++] = num;
        }
    }
    printf("%d\n",tot);
    for(int i = 0; i < tot; i++)
    {
        if(!strcmp(outs[i],"removeMin")) printf("%s\n",outs[i]);
        else printf("%s %d\n",outs[i],outn[i]);
    }
    return 0;
}
时间: 2024-11-08 21:54:23

CodeForces 681C Heap Operations(模拟)的相关文章

CodeForces 681C Heap Operations (模拟题,优先队列)

题意:给定 n 个按顺序的命令,但是可能有的命令不全,让你补全所有的命令,并且要求让总数最少. 析:没什么好说的,直接用优先队列模拟就行,insert,直接放入就行了,removeMin,就得判断一下队列是不是空的,然后再考虑getMin,这个是不是对应的值,如果队列中首元素比它大,那么就加上一个, 如果相等直接取出,如果小于就不断取队列中最小元素. 代码如下: #include <bits/stdc++.h> using namespace std; char s[15], t[30]; v

Codeforces 48C The Race 模拟题

题目链接:点击打开链接 题意: 给定n个加油站,一辆车由A点跑到B点,每个100m有一个加油站,每开100m需要10升油. 在每个车站会检查一下油量,若车子若开不到下一个加油站则加x升油. 开始有x升油 下面给出加油的记录. 问下一次加油在哪一站.若答案唯一输出具体哪站. 油箱容量无限 思路: 水模拟.. #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h>

Codeforces Round #357 (Div. 2) - C - Heap Operations

WA * 3 + TLE *1  啊啊啊!说好的考虑问题要仔细呢?! 题意: 简单说就是,有一串操作,丢失了一部分,只有 n 个操作了, 补全操作,使得每次 getMin 得到对应的值.输出所有操作的个数和操作序列. 解题: 用优先队列直接模拟过来的,标记一下某些位置 表示它之前还要进行哪些操作 才能做到,最后直接输出:对于每个情况,如果是 removeMin , 考虑队列是否为空,如果空,就要先插入一个::如果是 getMin ,考虑 当前队列最小的元素 比 给出的数 大还是小,如果小的话要把

CodeForces - 200DProgramming Language纯模拟

CodeForces - 200D Programming Language Time Limit: 2000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit Status Description Recently, Valery have come across an entirely new programming language. Most of all the language attracted h

Heap Operations 优先队列

Petya has recently learned data structure named "Binary heap". The heap he is now operating with allows the following operations: put the given number into the heap; get the value of the minimum element in the heap; extract the minimum element f

codeforces 614B(div.2) 模拟

模拟乘法 有毒的一题,各种细节..代码写得自己都不想看.. #include"cstdio" #include"queue" #include"cmath" #include"stack" #include"iostream" #include"algorithm" #include"cstring" #include"queue" #includ

CodeForces 1B. Spreadsheets(模拟)

题目链接:http://codeforces.com/problemset/problem/1/B B. Spreadsheets time limit per test 10 seconds memory limit per test 64 megabytes input standard input output standard output In the popular spreadsheets systems (for example, in Excel) the following

Codeforces #200(div.2) 模拟练习赛

A题: 题意:一行磁铁,同性相斥,找到这行磁铁可以分为多少块 思路:边读边计算,读到和上一次不一样的就加1(第一组数据特判) 手速题然而我没有把思路理清楚再写,比队友满了太多=_+. 代码: #include <set> #include <map> #include <cmath> #include <stack> #include <queue> #include <string> #include <vector>

Codeforces 704A Thor 队列模拟

题目大意:托尔有一部手机可执行三种操作 1.x APP产生一个新消息 2.读取x App已产生的所有消息 3.读取前t个产生的消息 问每次操作后未读取的消息的数量 题目思路: 队列模拟,坑点在于竟然卡内存……详细看代码. #include<iostream> #include<algorithm> #include<cstring> #include<vector> #include<stdio.h> #include<stdlib.h&g