题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805447855292416
【分析】
题意:有若干学生要来查询选课情况。要求按顺序输出每个学生的选课情况。
思路:数组下标好像不可以用字符串?所以,而本题输入的课程id也就只有4位,是可以把id转换为整数,然后用hash来完成。再使用一个vector容器,注意排序就好了。
#include<bits/stdc++.h>
using namespace std;
const int maxn=26*26*26*10+5;
vector<int>vv[maxn];
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;
}
int main()
{int n,k;scanf("%d%d",&n,&k);for(int i=0;i<k;i++){int ci,ni;scanf("%d%d",&ci,&ni);for(int j=0;j<ni;j++){char s[4];scanf("%s",s);vv[getID(s)].push_back(ci);}}for(int i=0;i<n;i++){char s[4];scanf("%s",s);int len=vv[getID(s)].size();printf("%s",s);cout<<" "<<len;sort(vv[getID(s)].begin(),vv[getID(s)].end());for(int i=0;i<len;i++)cout<<" "<<vv[getID(s)][i];cout<<endl;}return 0;
}