刚开始没理解,忽略了天数和时间的的关系。后来才改过来。。。
没什么难度,就个结构体。。(刚开始以为是线段树。。)
#include"stdio.h" #include"string.h" #include"stdlib.h"; struct node { int day[10][15]; char name[21]; }A[201]; int cmp(const void*a,const void*b) { return strcmp((*(struct node*)a).name,(*(struct node*)b).name); } int main() { int t; int n; int nn; int nnn; int i,j,l; int a,b,c; scanf("%d",&t); while(t--) { scanf("%d",&n); memset(A,0,sizeof(A)); for(i=0;i<n;i++) { scanf("%s",A[i].name); scanf("%d",&nn); for(j=0;j<nn;j++) { scanf("%d%d%d",&a,&b,&c); A[i].day[a][0]=1; for(l=b;l<=c;l++) A[i].day[a][l]=1; } } qsort(A,n,sizeof(A[0]),cmp); int cnt,f; scanf("%d",&nnn); for(i=0;i<nnn;i++) { cnt=f=0; scanf("%d%d%d",&a,&b,&c); for(j=0;j<n;j++) { if(A[j].day[a][0]==1) { for(l=b;l<=c;l++) { if(A[j].day[a][l]==1) { cnt++;f=1; if(cnt==1)printf("%s",A[j].name); else printf(" %s",A[j].name); break; } } } } if(!f)printf("None"); printf("\n"); } } return 0; }