zoukankan      html  css  js  c++  java
  • 华东交通大学2016年ACM“双基”程序设计竞赛 1007

    Problem Description

    ACM小学妹在今天的暑假训练结束后,想看球赛放松一下。当他打开电脑时查询到联盟今天直播N场球赛,每场球赛的起止时间(S1,E1),(S2,E2),...,(SN,EN)。现在小学妹想今天看完所有的球赛直播,不至于留到明天看重播了,毕竟明天依旧是要训练的。当小学妹看完这场球赛要切换到其他球赛时是不需要时间的。现在小学妹用自己训练用的电脑来看球赛,但是可能不够。毕竟小学妹自己的电脑最多只能同时播放1场直播,现在小学妹需要借一些电脑来同时播放球赛。本来小学妹自己是可以求出最少需要借多少台电脑来同时观看的,但是今天训练太累了,你可以帮助他吗?

    Input

    包含多组输入,第一行输入一个整数N(1≤N≤100000),表示任务的数目。以下N行每行两个整数Si,Ei,(0≤Si<Ei≤1000000000),表示任务的起至时间。

    Output

    输出小学妹最少需要借的电脑数目。

    Sample Input

    5
    1 10
    2 7
    6 9
    3 4
    7 10

    Sample Output

    2

    Author

    zhengjinke2123
    解法:简单来讲,贪心。不过超时用了优先队列,不怎么用问了学弟QAQ
    我们当然要找时间结束和开始的冲突部分,队列依次加入开始时间,输出从小到大输出,如果和结束时间冲突就加1,没有就弹出顶端元素
    #include<stdio.h>
    //#include<bits/stdc++.h>
    #include<string.h>
    #include<iostream>
    #include<math.h>
    #include<sstream>
    #include<set>
    #include<queue>
    #include<map>
    #include<vector>
    #include<algorithm>
    #include<limits.h>
    #define inf 0x3fffffff
    #define INF 0x3f3f3f3f
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define LL long long
    #define ULL unsigned long long
    using namespace std;
    struct P
    {
        LL st,ed;
    } He[100010];
    bool cmd(P a,P b)
    {
        if(a.st==b.st)
        {
            return a.ed<b.ed;
        }
        return a.st<b.st;
    }
    struct Q
    {
       LL x;
       bool friend operator<(Q a,Q b)
       {
           return a.x>b.x;
       }
    }q;
    bool cmp(Q a,Q b)
    {
        return a.x<b.x;
    }
    priority_queue<Q>que;
    void init()
    {
        while(!que.empty())
        {
            que.pop();
        }
    }
    int main()
    {
        int n;
    
        while(~scanf("%d",&n))
        {
            init();
            int num=0;
            for(int i=0;i<n;i++)
            {
                scanf("%lld%lld",&He[i].st,&He[i].ed);
                //cin>>He[i].st>>He[i].ed;
            }
            sort(He,He+n,cmd);
            q.x=He[0].ed;
            que.push(q);
            for(int i=1;i<n;i++)
            {
                q=que.top();
                if(q.x>He[i].st)
                {
                    num++;
                }
                else
                {
                    que.pop();
                }
                q.x=He[i].ed;
                que.push(q);
            }
            cout<<num<<endl;
        }
        return 0;
    }
    

      

  • 相关阅读:
    java后台打开浏览器代码
    java国际化
    Struts2之action 之 感叹号 ! 动态方法调用
    ssh框架总结之action接收参数的三种方式
    电脑开机过程
    4.18quaternion rotation
    4.2
    "hello,world"lena
    bash 简介
    SCHEDULE
  • 原文地址:https://www.cnblogs.com/yinghualuowu/p/6084550.html
Copyright © 2011-2022 走看看