PIPOJ 1125: PIPI看電視 貪心

化身孤島的鯨o發表於2020-10-11

題目:

http://39.106.164.46/problem.php?id=1125

思路:

按照結束時間從小到大排序,若相等,則按照開始時間從小到大排序即可。

程式碼如下:

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<cmath>
#include<queue>
#include<cstring>
#include<vector>
#include<stack>
#include<map>
#include<set>
#define MAX 1005
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std;

int n;

struct node{
    int start;
    int ends;
    node(int s,int e){
        start=s;
        ends=e;
    }
    bool operator < (const node &a) const{
        if(ends==a.ends) return start<a.start;
        else return ends<a.ends;
    }
};

int main(){
    while(cin>>n){
        vector<node> vec;
        int s,e;
        for(int i=0;i<n;i++){
            cin>>s>>e;
            vec.push_back(node(s,e));
        }
        sort(vec.begin(),vec.end());
        int ans=1;
        int now=vec[0].ends;
        for(int i=1;i<vec.size();i++){
            if(vec[i].start>=now){
                now=vec[i].ends;
                ans++;
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}