最多不相交线段

题目描述:已知数轴上0<N<10000条线段。每条线段按照端点Ai和Bi(Ai<>Bi,i=1..N)定义。端点坐标在(-999,999)内,坐标为整数。有些线段可能相交。编程实现删除最少数目的线段,使得余下的任意两条线段不相交。 输入:第一行为一整数N。接下来有N行,每行包含两个整数 (Ai 和 Bi), 用空格隔开。
输出:整数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);
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值