1041 考试座位号 (15 分)
输出样例:
3310120150912002 2
3310120150912119 1
解:这题结构体做就完了,我的时间复杂度是O(n^2);
然后欣赏大佬的思路, 大佬的时间复杂度是O(N+M) !
#include <cstdio>
#include <cstring>
#include <iostream>
#include <sstream>
#include <cmath>
#include <algorithm>
#include <string>
#include <stack>
#include <queue>
#include <vector>
#include <map>
using namespace std;
struct student {
char a[17];
int b;
int c;
}s[1001], t[1001];
int main() {
int n, m;
cin>>n;
for (int i = 0; i<n; i++) {
scanf("%s %d %d", &s[i].a, &s[i].b, &s[i].c);
}
cin>>m;
for (int i = 0; i<m; i++) {
scanf("%d", &t[i].b);
for (int j = 0; j<n; j++) {
if (s[j].b == t[i].b)
printf("%s %d\n", s[j].a, s[j].c);
}
}
return 0;
}
康康大佬的代码:
分析:建⽴string类型的⼆维数组stu[1005][2],假设试机座位号为t,将输⼊得到的学⽣准考证号s1保 存在stu[t][0]中,考试座位号s2保存在stu[t][2]中,对于查询的m个学⽣,已知试机座位号t,则直接输 出stu[t][0]和stu[t][1]即可
#include <iostream>
using namespace std;
int main() {
string stu[1005][2], s1, s2;;
int n, m, t;
cin >> n;
for(int i = 0; i < n; i++) {
cin >> s1 >> t >> s2;
stu[t][0] = s1;
stu[t][1] = s2;
}
cin >> m;
for(int i = 0; i < m; i++) {
cin >> t;
cout << stu[t][0] << " " << stu[t][1] << endl;
}
return 0;
}