HDU 1707

思路:标记课程表上的课程,询问时遍历课程表,再以字典序输出名字。

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<stdlib.h>
 4 #include<memory.h>
 5 #include<string.h>
 6 #include<algorithm>
 7 #include<cmath>
 8 #include<stack>
 9 const int MAXX= 50000;
10 const int mod=1e9+7;
11 using namespace std;
12 typedef long long ll;
13 int T;
14 int n;
15 int q;
16 int k;
17 struct info
18 {
19     bool  data[8][12];
20     char name[20];
21 } per[200];
22 
23 struct pp
24 {
25     char ans[21];
26 } w[210];
27 
28 bool cmp(pp a,pp b)
29 {
30     return strcmp(a.ans,b.ans)<0;
31 }
32 
33 int main()
34 {
35     freopen("in.txt","r",stdin);
36     scanf("%d",&T);
37     while(T--)
38     {
39         scanf("%d",&n);
40         memset(per,0,sizeof(per));
41         for(int i=1; i<=n; i++)
42         {
43             int d,b,e;
44             scanf("%s%d",per[i].name,&k);
45             for(int j=1; j<=k; j++)
46             {
47                 scanf("%d%d%d",&d,&b,&e);
48                 while(b<=e)
49                 {
50                     per[i].data[d][b]=1;
51                     b++;
52                 }
53                 //memset(per[i].data[d]+b,1,(e-b+1)*sizeof(per[i].data[0][0]));
54             }
55         }
56         scanf("%d",&q);
57         while(q--)
58         {
59             int d,b,e;
60             scanf("%d%d%d",&d,&b,&e);
61             //char newname[200][22];
62             int countt=0;
63             for(int i=1; i<=n; i++)
64             {
65                 bool flag=1;
66                 for(int j=b; j<=e; j++)
67                 {
68                     if(per[i].data[d][j])
69                     {
70                         flag=0;
71                         break;
72                     }
73                 }
74                 if(!flag)
75                 {
76                     strcpy(w[countt].ans,per[i].name);
77                     countt++;
78                 }
79             }
80             if(countt==0)
81             {
82                 cout<<"None"<<endl;
83                 continue;
84             }
85             sort(w,w+countt,cmp);
86             for(int i=0; i<countt; i++)
87             {
88                 if(i)
89                     printf(" ");
90                 printf("%s",w[i].ans);
91             }
92             //printf("%s
",newname[countt-1]);
93             printf("
");
94         }
95     }
96     return 0;
97 }
View Code
原文地址:https://www.cnblogs.com/ITUPC/p/4668604.html