HDU 1707

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

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\n",newname[countt-1]);

93             printf("\n");

94         }

95     }

96     return 0;

97 }
View Code

 

你可能感兴趣的:(HDU)