题意:给出一系列时刻数和一个时长,求不在同一时间段中的最少个数和编号;
思路:sort排序,二维的sort,在排序的同时保存每个数的编号;
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int h,m,s;
int id[500010];
struct node
{
int sum,id;
}q[500010];
int cmp(node a,node b)
{
return a.sum<b.sum;
}
int main()
{
int T,n,i,j,k,l,mark,shu;
while(scanf("%d",&T)!=EOF)
{
while(T--)
{
mark=1;
scanf("%d%d",&n,&l);
for(i=0;i<n;i++)
{
scanf("%d:%d:%d",&h,&m,&s);
q[i].sum=h*3600+m*60+s;
q[i].id=i+1;
}
sort(q,q+n,cmp);
shu=q[0].sum;
for(i=0;i<n;i++)
{
if(q[i].sum-shu>=l)
{
shu=q[i].sum;
id[mark++]=q[i].id;
//printf("%d\n",q[i].id);
}
}
id[0]=q[0].id;
sort(id,id+mark);
printf("%d\n",mark);
for(i=0;i<mark;i++)
{
if(i==0)
printf("%d",id[i]);
else printf(" %d",id[i]);
}
printf("\n");
}
}
return 0;
}