考察排序的模拟题
#include<cstdio>
#include<cstdlib>
struct one_student
{
int num;
int h;
int m;
int s;
};
int cmp(const void *a,const void *b)
{
if((*(one_student *)a).h!=(*(one_student *)b).h) return (*(one_student *)a).h-(*(one_student *)b).h;
else if((*(one_student *)a).m!=(*(one_student *)b).m) return (*(one_student *)a).m-(*(one_student *)b).m;
else return (*(one_student *)a).s-(*(one_student *)b).s;
}
int cmp1(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
bool compare(one_student a,one_student b,int l)
{
long long sum_a=a.h*3600+a.m*60+a.s;
long long sum_b=b.h*3600+b.m*60+b.s;
if(sum_b-sum_a>=l) return false;
else return true;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,l;
scanf("%d%d",&n,&l);
one_student student[n];
for(int i=0;i<n;i++)
{
student[i].num=i+1;
scanf("%d:%d:%d",&student[i].h,&student[i].m,&student[i].s);
}
qsort(student,n,sizeof(student[0]),cmp);
int ans[n],k=0;
ans[k++]=student[0].num;
one_student temp=student[0];
for(int i=1;i<n;i++)
{
if(compare(temp,student[i],l)==0)
{
ans[k++]=student[i].num;
temp=student[i];
}
}
qsort(ans,k,sizeof(ans[0]),cmp1);
printf("%d\n",k);
for(int i=0;i<k;i++)
{
printf("%d",ans[i]);
if(i!=k-1) printf(" ");
}
printf("\n");
}
return 0;
}