1047. Student List for Course (25)

    xiaoxiao2021-03-26  24

    1. 原题: https://www.patest.cn/contests/pat-a-practise/1047

    2. 思路:

    题意: 输出每个课程的学生名字。比较简单。 思路: 此题关键是处理超时问题。 所以要把名字转换成数字来存储,用字符串超时。 剩下的就是把每个课程的学生名字压入vector里面,再排序输出。

    3. 源码(已AC):

    #include<iostream> #include<algorithm>//使用sort函数 #include<vector> using namespace std; const int Max = 2501;//最大课程数 int toId(char *s);//名字转换成数字id void toName(int id, char *s);//数字转换成名字 int main(void) { //freopen("in.txt", "r", stdin); int N, K; scanf("%d %d", &N, &K); vector<int> cou[Max];//存储每个课程的学生名字 char name[5]; int c; for (int i = 0; i < N; i++) { scanf("%s %d", name, &c); for (int j = 0; j < c; j++) { int id; scanf("%d", &id); cou[id].push_back(toId(name));//压入vector } } for (int i = 1; i <= K; i++)//输出 { int size_s = cou[i].size(); if (size_s != 0) { sort(cou[i].begin(), cou[i].end());//先排序 printf("%d %d\n", i, size_s); for (int j = 0; j < size_s; j++) { toName(cou[i][j], name); printf("%s\n", name); } } else cout << i << ' ' << 0 << endl; } return 0; } int toId(char *s)//名字转换成数字id { int id = s[3] - '0'; id += (s[2] - 'A') * 10 + (s[1] - 'A') * 260 + (s[0] - 'A') * 260*26; return id; } void toName(int id, char *s)//数字转换成名字 { s[4] = '\0'; s[3] = id % 10 + '0'; s[2] = id % 260/10 + 'A'; s[1] = id / 260 % 26 + 'A'; s[0] = id / 260 / 26 + 'A'; return; }
    转载请注明原文地址: https://ju.6miu.com/read-659510.html

    最新回复(0)