8-04. 打印学生选课清单

来源:互联网 发布:石油库存公布数据 编辑:程序博客网 时间:2024/06/07 08:40
#include<algorithm>#include<vector>#include<cstdio>#include<unordered_map>using namespace std;char name[5];int f(char*p){return (p[0]-'A')*6760+(p[1]-'A')*260+(p[2]-'A')*10+p[3]-'0';}unordered_multimap<int,int>ke;int main(){  int n,k;scanf("%d%d",&n,&k);  for(int i=1;i<=k;++i){    int cnt,nth;scanf("%d%d",&nth,&cnt);    while(cnt--){      scanf("%s",name);      ke.insert({f(name),nth});}  }//for    while(n--){    scanf("%s",name);int k=f(name);    vector<int>no(ke.count(k));    printf("%s %ld",name,no.size());    auto  it=ke.equal_range(k).first;    for(auto &x:no)x=it++->second;    sort(no.begin(),no.end());    for(auto &x:no)printf(" %d",x);    putchar('\n');  }  return 0;}
用哈希表,但肯定不需要自己写一个哈希表,自己再怎么写也不可能比STL的写的更好,如果超时或超内存,肯定是有些地方的优化做的不好。比如名字明显可以转化为一个数字,那么用string倒腾就会超时而且没必要。另外课程标号并不是按顺序来的,否则给这个标号就没用了,pat的出题人很聪明不会给一个没用的数字的
0 0