您的位置:首页 > 编程语言 > C语言/C++

1047. Student List for Course (25)

2016-02-25 18:50 309 查看
    用string存储的话会超时,故将名字Hash成整数存储

#include <iostream>
#include <cstdio>
#include <unordered_map>
#include <vector>
#include <algorithm>

using namespace std;

int str2int(char name[]){
return (name[0]-'A'+10)*36*36*36 + (name[1]-'A'+10)*36*36 + (name[2]-'A'+10)*36 + (name[3]-'0');
}

void int2str(int n, char name[]){
int idx = 3;
while(n){
int r = n%36;
if(r >= 0 && r <= 9) name[idx] = r + '0';
else name[idx] = r - 10 + 'A';

n /= 36;
--idx;
}
}

int main(){
int n, k;
scanf("%d%d", &n, &k);

unordered_map<int, vector<int>> courses;

for(int i = 1; i <= k; ++i){
courses[i] = vector<int>();
}

char name[5];
for(int i = 0; i < n; ++i){
int c, course;

scanf("%s%d", name, &c);
for(int j = 0; j < c; ++j){
scanf("%d", &course);
courses[course].push_back(str2int(name));
}
}

for(int i = 1; i <= k; ++i){
printf("%d %d\n", i, (int)courses[i].size());

sort(begin(courses[i]), end(courses[i]));
for(auto& n : courses[i]){
int2str(n, name);
printf("%s\n", name);
}
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息