今年暑假不AC

解题思路:对每一个节目,按结束时间升序排序,如果结束时间相等,则按开始时间降序排序;先观看较快结束的节目,留下更多的时间观看其他节目。


疑难点:结构体排序、贪心算法。

#include<stdio.h>
#include<stdlib.h>
struct node
{
  int x;
  int y;
} number[110];
int cmp(const void *a, const void *b)
{
    if((*(node *)a).y == (*(node *)b).y) {
      return (*(node *)b).x - (*(node *)a).x;
    }
    else {
      return (*(node *)a).y - (*(node *)b).y;
    }
}
int main()
{
    int n,count;
    while(true) {
      scanf("%d",&n);
      if(n == 0) {
        break;
      }
      for(int i = 0; i < n; i++) {
        scanf("%d %d",&number[i].x,&number[i].y);  
      }
      qsort(number,n,sizeof(number[0]),cmp);
      int last = 0;
      count = 0;
      for(int i = 0; i < n; i ++) {
        if(number[i].x >= last) {
          last = number[i].y;
          count++;
        }
      }
      printf("%d\n",count);   
    }
}

        

你可能感兴趣的:(算法,ac)