NYOJ 891 找点

来源:互联网 发布:郑州美好电子淘宝店 编辑:程序博客网 时间:2024/04/29 06:22

描述

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

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

41 52 41 42 331 23 45 612 2

样例输出

131

 

很简单的一道贪心算法题。

 

排序后找重合区域就可以了。 注意这组数据:

4
1 5
2 4
1 4
2 3

结果是1,

#include <stdio.h>#include <stdlib.h>typedef struct{    int l;    int r;}limits;limits pot[101];  int comp ( const void *a, const void *b ){    limits *c = (limits  *) a;     limits *d = (limits  *) b;    if(c->l != d->l)         return c->l - d->l;         else         return d->r - c->r;     }  void readp(int n){    int i;    for (i=0;i<n;i++)    {        scanf("%d%d",&pot[i].l,&pot[i].r);    }  }  void findp(int n){    int i;    int stand;    int ti=1;    qsort(pot,n,sizeof(limits),comp);      stand=pot[0].r;    for (i=1;i<n;i++)    {        if (pot[i].l>stand)        {            stand=pot[i].r;            ti++;        }        if (pot[i].l<=stand&&pot[i].r<=stand)        {            stand=pot[i].r;        }          }    printf("%d\n",ti);}int main(){    int n;    while(scanf("%d",&n)!=EOF)    {        readp(n);        findp(n);    }    return 0;}


 

 

0 0
原创粉丝点击