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;
}
文章描述了如何使用C语言中的qsort函数对任务结束时间进行排序,以解决小张在给定开始和结束时间的任务中找到最多能完成的任务数的问题。作者通过遍历和比较结束时间来确定答案。
331

被折叠的 条评论
为什么被折叠?



