1 /**
2 题目描述:
3 输入N个学生的信息,然后进行查询。
4
5 输入:
6 输入的第一行为N,即学生的个数(N<=1000) 接下来的N行包括N个学生的信息,信息格式如下:
7 01 李江 男 21
8 02 刘唐 男 23
9 03 张军 男 19
10 04 王娜 女 19
11 然后输入一个M(M<=10000),接下来会有 M 行,代表 M 次查询,每行输入 一个学号,格式如下:
12 02
13 03
14 01
15 04
16
17 输出:
18 输出M行,每行包括一个对应于查询的学生的信息。 如果没有对应的学生信息,则输出“No Answer!”
19
20 样例输入:
21 4
22 01 李江 男 21
23 02 刘唐 男 23
24 03 张军 男 19
25 04 王娜 女 19
26 5
27 02
28 03
29 01
30 04
31 03
32 样例输出:
33 02 刘唐 男 23
34 03 张军 男 19
35 01 李江 男 21
36 04 王娜 女 19
37 03 张军 男 19
38 */
39 #include<cstdio>
40 #include<algorithm>
41 #include<cstring>
42 #include<cstdlib>
43 using namespace std;
44
45 struct Student
46 {
47 char no[100];
48 char name[100];
49 char sex[5];
50 int age;
51
52 bool operator < (const Student &A) const
53 {
54 return strcmp(no, A.no) < 0;
55 }
56 }buf[1000];
57
58 int main()
59 {
60 int n;
61 while(scanf_s("%d", &n, 1) != EOF)
62 {
63 for(int i = 0 ; i < n ; i ++)
64 scanf_s("%s%s%s%d", buf[i].no, _countof(buf[i].no), buf[i].name, _countof(buf[i].name), \
65 buf[i].sex, _countof(buf[i].sex), &buf[i].age, 1);
66
67 sort(buf, buf + n);
68
69 int t;
70 scanf_s("%d", &t, 1);
71 while(t -- != 0)
72 {
73 int ans = -1;
74 char x[30];
75 scanf_s("%s", x, _countof(x));
76
77 int top = n - 1, base = 0;
78 while(top >= base)
79 {
80 int mid = (top + base) / 2;
81 int tmp = strcmp(buf[mid].no, x);
82 if(tmp == 0)
83 {
84 ans = mid;
85 break;
86 }
87 else if(tmp > 0)
88 top = mid - 1;
89 else
90 base = mid + 1;
91 }
92 if(ans == -1)
93 printf_s("No answer!\n");
94 else
95 printf_s("%s %s %s %d\n", buf[ans].no, buf[ans].name, buf[ans].sex, buf[ans].age);
96 }
97 }
98
99 return 0;
100 }