这题一点都不难,但是会有一个点超时,我原本是用map直接写,最后一个点超时,这是因为处理字符串类型的速度是相当慢的,这题学生姓名非常规则,所以hash一下转化为数字速度就会快很多。记录一下这种情况。
#include<iostream> #include<string> #include<vector> #include<map> #include<set> #include<sstream> #include<functional> #include<algorithm> using namespace std; const int INF = 0xfffff; const int maxn = 1005; int getID(char *name) { int id = 0; for (int i = 0; i < 3; i++) { id = id*26 + (name[i] - 'A'); } id =id*10+ (name[3] - '0'); return id; } set<int> stu[26*26*26*10+10]; int main() { int n, m,id; char name[15]; scanf("%d%d", &n, &m); for (int i = 0; i < m; i++) { int tn, index; scanf("%d%d", &index, &tn); for (int j = 0; j < tn; j++) { scanf("%s", name); id = getID(name); stu[id].insert(index); } } for (int i = 0; i < n; i++) { scanf("%s", name); id = getID(name); printf("%s %d", name, stu[id].size()); for (auto x : stu[id]) { printf(" %d", x); } printf("\n"); } return 0; }