找点

来源:互联网 发布:sql server 2008r2语句 编辑:程序博客网 时间:2024/04/29 12:26


描述

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

输入

多组测试数据。
每组数据先输入一个N,表示有N个闭区间(N≤100)
接下来N行,每行输入两个数ab(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

 

 

1、先左排升序,再右排升序

#include <stdio.h>

#include <algorithm>

using namespace std;

typedef struct N{

  inta,b;

}Data[100];

bool cmp(N x,N y)

{

   if(x.a!=y.a)

       return x.a<y.a;//升序

   return x.b<y.b;//升序

}

Data data;

int main()

{

   int n,i,j,t,k,m;

   while(~scanf("%d",&n))

    {

       for(i=0;i<n;i++)

       scanf("%d %d",&data[i].a,&data[i].b);

       sort(data,data+n,cmp);

       m=1;

       for(i=n-1,j=n-1-1;j>=0;)//逆序

       {

           if(data[j].b<data[i].a)

           {

               i=j;

                m++;

           }

           j--;

       }

       printf("%d\n",m);

       }

   return 0;

}

2、先右排升序,再左排降序      

#include<stdio.h>

#include<stdlib.h>

struct node{

  intx;

  inty;

};

struct node a[100];

int cmp(const void *a,const void *b)

{

   struct node *c=(node *)a;

   struct node *d=(node *)b;

   if(c->y!=d->y) return c->y-d->y;//从小大大排

      else return d->x-c->x;//从大到小排

}

int main(){

  intn,i,j,temp;

 while(scanf("%d",&n)!=EOF){

  for(i=0;i<n;i++)

     scanf("%d%d",&a[i].x,&a[i].y);

  qsort(a,n,sizeof(a[0]),cmp);

   for(i=0;i<n;i++)

  printf("%d%d\n",a[i].x,a[i].y);

   temp=a[0].y;

  int count=1;

  for(i=1;i<n;i++)//正序

{

   if(a[i].x>temp){

       count++;

       temp=a[i].y;

    }

   }

  //printf("%d\n",count);

  }

 return 0;

}

0 0
原创粉丝点击