UVALive

来源:互联网 发布:黑马程序员免费视频 编辑:程序博客网 时间:2024/04/30 08:46
比赛的一个水题,英语不好,一开始把题意都错了, 后来改了下就对了,很简单的一个算是贪心的吧,代码如下
#include <iostream>#include <cstdio>#include <queue>#include <algorithm>#include <string>#include <cmath>using namespace std;struct people{    int come, go;    bool operator < (const people & p)    {        return come < p.come ||(come == p.come && go <p.go);    }}person[300000+1];int main(){    int m, n;    while(scanf("%d%d", &m, &n) != EOF)    {        priority_queue< int, vector <int>, greater<int> >q;        int sum = 0, lock = 0;        int come, go;        for(int i = 0; i < m; i++)        {            scanf("%d%d", &person[i].come, &person[i].go);        }        sort(person, person + m);        for(int i = 0;i < m; i++)        {            come = person[i].come;            go = person[i].go;            if(!q.empty() && come >= q.top() && come <= q.top() + n  )            {                    q.pop();                    lock++;            }            else if(!q.empty() && come > q.top() + n )            {                    while(come  > q.top() + n  && q.size() > 0)                        q.pop();                    if(q.size() != 0)                    {                        q.pop();                        lock++;                    }            }            q.push(come + go);        }        cout << lock << endl;    }    return 0;}

0 0
原创粉丝点击