id反向hash成name,就是正向hash的逆过程
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
int n, k;
struct Course{
vector<int> stu;
int cnt = 0;
Course(){}
}course[2505];
int HashName(string name){
return (name[0] - 'A') * 26 * 26 * 10 + (name[1] - 'A') * 26 * 10 + (name[2] - 'A') * 10 + (name[3] - '0');
}
void ReHash(int id){
char name[5];
name[3] = id % 10 + '0';
id /= 10;
for(int i = 2; i >= 0; --i){
name[i] = id % 26 + 'A';
id /= 26;
}
name[4] = '\0';
puts(name);
}
int main(){
scanf("%d%d",&n,&k);
string name;
int id, t, c;
for(int i = 1; i <= n; ++i){
cin >> name;
id = HashName(name);
scanf("%d",&t);
for(int j = 0; j < t; ++j){
scanf("%d",&c);
course[c].stu.push_back(id);
++course[c].cnt;
}
}
for(int i = 1; i <= k; ++i){
printf("%d %d\n",i,course[i].cnt);
sort(course[i].stu.begin(),course[i].stu.end());
for(int j = 0; j < course[i].cnt; ++j){
ReHash(course[i].stu[j]);
}
}
return 0;
}