Description
小张经常为了事情太多安排不开而苦恼。现在他手头有n项任务,每项任务都有一个开始时间si,ei。要想完成一个任务必须从开始时间做到结束时间,并且同一时间小张只能进行一项任务。
小张想知道他最多可以完成几项任务。
Input
第一行一个整数n,表示小张手头任务的个数。
接下来n行,每行两个整数si,ei表示任务的开始时间和结束时间。
Output
一行一个整数,表示小张最多可以完成几项任务。
思路
思路:对结束时间进行qsort排序。使用结构体,可以在排序时不丢失配对开始时间的信息。
注意:解引用最好两侧都加上括号,不加的话在dev上可以跑,但乐学似乎编译不过。
代码
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
int sta;
int end;
}time;
time t[300010];
int comp(const void*a,const void*b)
{
return (*(time*)a).end-(*(time*)b).end;
}
int main()
{
int n=0, i=0 ,j=0 , ans=1;
scanf("%d\n",&n);
for(i=0;i<n;i++)//输入存储
{
scanf("%d %d",&(t[i].sta),&(t[i].end));
}
qsort(t,n,sizeof(time),comp); //排序end
for(i=0;i<n;i++)//找答案
{
for(j=i+1 ; j<n; j++)
{
if((t[i].end)<=(t[j].sta))
{
ans++; i=--j; break;
}
}
}
printf("%d\n",ans);
return 0;
}