阅读背景:

CCF 201709-2 公共钥匙盒 100分

来源:互联网 

渣代码,写了好长时间。。。。不过得满分还是很开心的,又get到几点知识,开森。

int main()
{ 
    priority_queue<int,vector<int>,greater<int>>q;   //q记录最左边的空着的下标
    int n, k;
    cin >> n >> k;
    vector<int>key(n + 1, 0);
    for (int i = 1; i <= n; ++i)
        key[i] = i;
    unordered_set<int> s,ss;
    unordered_map<int, vector<int>>m;
    int bianhao, start, c;
    while (k--)
    {
        cin >> bianhao >> start >> c;
        m[start].push_back(bianhao);
        m[start + c].push_back(bianhao);
        ss.insert(start);
        ss.insert(start + c);
    }
    vector<int>time;
    for (auto i : ss)
        time.push_back(i);
    sort(time.begin(), time.end());
    for (auto i : time)
    {
        sort(m[i].begin(), m[i].end());
        for (int j=0;j<m[i].size();++j)
        {
            if (s.find(m[i][j]) != s.end())    //归还
            {
                s.erase(m[i][j]);
                int tmp = q.top();
                q.pop();
                key[tmp] = m[i][j];
                m[i][j] = -1;
            }
        }
        for (int j = 0; j < m[i].size(); ++j)   //取
        {
            if (m[i][j] > 0)
            {
                s.insert(m[i][j]);
                for (int a = 1; a <= key.size(); ++a)
                    if (key[a] == m[i][j])
                    {
                        q.push(a);
                        break;
                    }
            }
        }
    }
    for (int i = 1; i <= n; ++i)
        cout << key[i] << " ";
    return 0;
}int m



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: