nyoj 891 找点

来源:互联网 发布:高端 商务礼品 知乎 编辑:程序博客网 时间:2024/05/02 01:00

上数学课时,老师给了LYH一些闭区间,让他取尽量少的点,使得每个闭区间内至少有一个点。但是这几天LYH太忙了,你们帮帮他吗?

输入
多组测试数据。
每组数据先输入一个N,表示有N个闭区间(N≤100)。
接下来N行,每行输入两个数a,b(0≤a≤b≤100),表示区间的两个端点。
输出
输出一个整数,表示最少需要找几个点。
样例输入
41 52 41 42 331 23 45 612 2
样例输出
13

1

思路:按照区间的起点终点排序,看上一个区间的终点是否在下一个区间内部,如果在,就可以共用一个点,不行的话,就要sum++,依次进行

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;struct node{   int s;   int e;}book[105];int cmp(node x,node y){   if(x.e!=y.e)       return x.e<y.e;   else      return x.s>x.s;}int main(){    int n,a,b;    int i,j,k,sum;    while(scanf("%d",&n)!=EOF){        k=n;      for(i=0;i<n;i++){            scanf("%d%d",&book[i].s,&book[i].e);        }        sort(book,book+n,cmp);        sum=1;        j=book[0].e;        for(i=1;i<n;i++){            if(book[i].s>j){                j=book[i].e;                sum++;            }        }        printf("%d\n",sum);    }    return 0;}


0 0