简单模拟题,照着题目意思做就行了
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Student
{
int index;
int time;
};
static int cmp(const void *p1, const void *p2)
{
struct Student *s1 = (struct Student*) p1;
struct Student *s2 = (struct Student*) p2;
return s1->time - s2->time;
}
int main()
{
int t, n, l, flag[20000];
struct Student *array = malloc(20000 * sizeof(struct Student));
scanf("%d", &t);
while (t--)
{
memset(flag, 0, sizeof(flag));
scanf("%d %d", &n, &l);
int i, hh, mm, ss;
for (i = 0; i < n; i++)
{
scanf("%d:%d:%d", &hh, &mm, &ss);
array[i].index = i;
array[i].time = hh * 3600 + mm * 60 + ss;
}
qsort(array, n, sizeof(struct Student), cmp);
int prev = array[0].time, total = 1, first = 1;
flag[array[0].index] = 1;
for (i = 1; i < n; i++)
if (array[i].time >= prev + l)
{
prev = array[i].time;
flag[array[i].index] = 1;
total++;
}
printf("%d\n", total);
for (i = 0; i < n; i++)
if (flag[i])
{
if (first)
{
printf("%d", i + 1);
first = 0;
}
else
printf(" %d", i + 1);
}
putchar('\n');
}
free(array);
return 0;
}