NYOJ891 选点

39 阅读1分钟

题目:

找点

时间限制: 2000 ms  |  内存限制: 65535 KB

难度: 2

    • 描述

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

        • 输入
        • 多组测试数据。
          每组数据先输入一个N,表示有N个闭区间(N≤100)。
          接下来N行,每行输入两个数a,b(0≤a≤b≤100),表示区间的两个端点。
        • 输出
        • 输出一个整数,表示最少需要找几个点。
        • 样例输入
        • 4
          1 5
          2 4
          1 4
          2 3
          3
          1 2
          3 4
          5 6
          1
          2 2
          
        • 样例输出
        • 1
          3
          1
          

代码:

#include <stdio.h>
#include <algorithm>
using namespace std;
struct qujian
{
    int x;
    int y;
} a[1005];
bool cmp(qujian x,qujian y)
{
    if(x.y==y.y)
        return x.x<y.x;
    else
        return x.y<y.y;
}
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        for(int i=0; i<n; i++)
            scanf("%d %d",&a[i].x,&a[i].y);
        sort(a,a+n,cmp);
//        for(int i=0; i<n; i++)
//            printf("%d %d\n",a[i].x,a[i].y);
        int sum=1;
        int end=a[0].y;
        for(int i=1; i<n; i++)
        {
            if(a[i].x>end)
            {
                end=a[i].y;
                sum++;
            }
        }
        printf("%d\n",sum);
    }
    return 0;
}


ps:典型的区间选点问题,和非洲小孩那道题一模一样