1047 Student List for Course 解题代码测试结果问题整理 解题代码 #include<cstdio> #include<vector> #include<unordered_map> #include<algorithm> #include<cstring> using namespace std; unordered_map<int, vector<string> > m; int n, k, l, t; string temp; bool cmp(string a, string b) { return a < b; } int main() { temp.resize(4); scanf("%d%d", &n, &k); for (int i = 0; i < n; i++) { scanf("%s%d", temp.c_str(), &l); for (int j = 0; j < l; j++) { scanf("%d", &t); m[t].push_back(temp); } } for (int i = 1; i <= k; i++) { if (i > 1) printf("\n"); printf("%d %d", i, m[i].size()); sort(m[i].begin(), m[i].end(),cmp); for (int j = 0; j < (int)m[i].size(); j++) printf("\n%s", m[i][j].c_str()); } return 0; } 测试结果 问题整理 1.vector。 2.通过使用unsigned map替代map,使用scanf和printf替代cin cout,用字符数组替代string,将时间消耗降到最低。 3.事实证明,vector中不能存放字符串名,例如vector<char [5]>是错误的,vector<char *>也只是传递指针而已。故此处只能在vector中存放string。 4.scanf_s中输入字符串时需要补充字符串数组的大小,即string的length+1的大小。