牛客小白月赛7 I-新建 Microsoft Office Word 文档(set or优先队列)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sugarbliss/article/details/82725156

----------------------------------------------------传送门----------------------------------------------------

思路:把删除的数放入set,或者优先队列,然后维护。

set做法:

#include<bits/stdc++.h>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
#define LL long long
set <int> s;
int main()
{
    int n;
    cin >> n;
    for(int i = 1; i <= n; i++)
        s.insert(i);
    set<int> ::iterator it;
    while(n--)
    {
        string str;
        cin >> str;
        if(str == "New")
        {
            it = s.begin();
            cout << *it << endl;
            s.erase(it);
        }
        else
        {
            int x; cin >> x;
            it = s.find(x);
            if(it != s.end()) puts("Failed");
            else
            {
                puts("Successful");
                s.insert(x);
            }
        }
    }
}

优先队列做法:

#include<bits/stdc++.h>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
#define LL long long

const int MAX_N = 100005;
int n, t, x;
string str;
priority_queue<int,vector<int>,greater<int> > q;
bool vis[MAX_N];
int main()
{
    cin >> n;
    while(n--)
    {
        cin >> str;
        if(str == "New")
        {
            if(!q.empty())
            {
                cout << q.top() << endl;
                vis[q.top()] = true;
                q.pop();
            }
            else
            {
                vis[++t] = true;
                cout << t << endl;
            }
        }
        else
        {
            cin >> x;
            if(vis[x])
            {
                vis[x] = false;
                puts("Successful");
                q.push(x);
            }
            else puts("Failed");
        }

    }
}

猜你喜欢

转载自blog.csdn.net/sugarbliss/article/details/82725156
今日推荐