F - Heap Operations(2016-01-18)

題目大意
這是一道優先隊列的題,題目給定 n 個按順序的命令,但是可能有的命令不全,讓你補全所有的命令,并且要求讓總數最少。

思路
用優先隊列模擬,
如果輸入的是insert那就直接加入隊列;
如果輸入的是removeMin就要判斷一下隊列此時是否為空,如果為空就先insert 1.再removeMin;
如果輸入的是getMin就要判斷輸入的數字x是否等于隊列首元素q.top(),這個過程用一個循環來完成,如果隊列中首元素比它大,那么就加上一個,
如果相等直接取出,如果小于就不斷取隊列中最小元素。

#include<iostream>
#include<queue>
#include<stdio.h>
using namespace std;

char s[15],t[30];
vector<string> ans;

int main()
{
    int n,x;
    while(cin>>n)
    {
        ans.clear();
        priority_queue<int, vector<int> , greater<int> > q;
        for(int i=0;i<n;i++)
        {
            scanf("%s",s);
            if(s[0]=='i')
            {
                scanf("%d",&x);
                sprintf(t,"insert %d",x);
                ans.push_back(string(t));
                q.push(x);
            }
            else if(s[0]=='r')
            {
                if(q.empty())
                {
                    ans.push_back("insert 1");
                    q.push(1);
                }
                ans.push_back("removeMin");
                q.pop();
            }
            else
            {
                scanf("%d",&x);
                while(1)
                {
                    if(q.empty()||q.top()>x)
                    {
                        q.push(x);
                        sprintf(t,"insert %d",x);
                        ans.push_back(string(t));
                    }
                    else if(q.top()==x)
                    {
                        break;
                    }
                    else
                    {
                        ans.push_back("removeMin");
                        q.pop();
                    }
                }
                sprintf(t,"getMin %d",x);
                ans.push_back(string(t));
            }
        }
        cout<<ans.size()<<endl;
        for(int i=0;i<ans.size();i++)
        cout<<ans[i]<<endl;
    }
    return 0;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,740評論 18 399
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,837評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,841評論 25 708
  • 乖巧的你總是表現最好,如果膽子再大一點表現更主動一點你會更棒。這次蛻變訓練你做到了,造型感、舞感變得更好了。而且每...
    Du_Fresne閱讀 183評論 0 0