codevs 1214 线段覆盖

来源:互联网 发布:mac看照片怎么下一张 编辑:程序博客网 时间:2024/06/05 11:21

1214 线段覆盖

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold
题目描述 Description

    给定x轴上的N(0<N<100)条线段,每个线段由它的二个端点a_I和b_I确定,I=1,2,……N.这些坐标都是区间(-999,999)的整数。有些线段之间会相互交叠或覆盖。请你编写一个程序,从给出的线段中去掉尽量少的线段,使得剩下的线段两两之间没有内部公共点。所谓的内部公共点是指一个点同时属于两条线段且至少在其中一条线段的内部(即除去端点的部分)。

输入描述 Input Description

    输入第一行是一个整数N。接下来有N行,每行有二个空格隔开的整数,表示一条线段的二个端点的坐标。

输出描述 Output Description

    输出第一行是一个整数表示最多剩下的线段数。

样例输入 Sample Input

3

6  3

1  3

2  5

样例输出 Sample Output

2

数据范围及提示 Data Size & Hint

0<N<100

AC代码

#include<stdio.h>typedef struct node {    int start;    int end;}node;node a[101];void sort(int T) {    int i;    int j;    node tmp;        for(i = 0;i < T;i++) {        for(j = i;j < T;j++) {            if(a[i].start > a[j].start) {                tmp = a[i];                a[i] = a[j];                a[j] = tmp;            }            if(a[i].end > a[j].end) {                tmp = a[i];                a[i] = a[j];                a[j] = tmp;            }        }    }}int main(void) {    int T;    int i;    int b;    int c;    int max = -1000;    int count = 0;        scanf("%d",&T);    for(i = 0;i < T;i++) {        scanf("%d %d",&b,&c);        if(b > c) {            a[i].start = c;            a[i].end = b;        } else {            a[i].start = b;            a[i].end = c;        }    }    sort(T);        for(i = 0;i < T;i++) {        if(a[i].start >= max) {            count++;            max = a[i].end;        } else {            continue;        }    }    printf("%d\n",count);        return 0;}







原创粉丝点击