题目描述:已知数轴上0<N<10000条线段。每条线段按照端点Ai和Bi(Ai<>Bi,i=1..N)定义。端点坐标在(-999,999)内,坐标为整数。有些线段可能相交。编程实现删除最少数目的线段,使得余下的任意两条线段不相交。
输入:第一行为一整数N。接下来有N行,每行包含两个整数 (Ai 和 Bi), 用空格隔开。
输出:整数p,即删除后余下的线段数。
样例输入:
3
6 3
1 3
2 5
输出:整数p,即删除后余下的线段数。
样例输入:
3
6 3
1 3
2 5
样例输出:2
代码:
#include<stdio.h>
typedef struct _line
{
int x;
int y;
}Line;
int cmp(const void* a, const void* b)
{
Line* l1 = (Line*)a;
Line* l2 = (Line*)b;
return l1->y - l2->y;
}
int main()
{
Line a[10000];
int n;
scanf("%d", &n);
int i;
for(i = 0; i < n; i++)
{
int x, y;
scanf("%d%d", &x, &y);
if(x <= y)
{
a[i].x = x; a[i].y = y;
}
else
{
a[i].y = x; a[i].x = y;
}
}
qsort(a, n, sizeof(a[0]), cmp);
int count = 0, j;
for(i = 0; i < n; )
{
count++;
for(j = i + 1; j < n; j++)
{
if(a[j].x >= a[i].y) break;
}
i = j;
}
printf("%d\n", count);
}