PAT甲级_1039 Course List for Student (25 分)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_44705116/article/details/102715302

题目大意:输入课程编号及参加学生,输出学生及其参加课程。

据说用字符串与cin会超时……将字符串哈希化,在输入课程下的学生时将该课程压入哈希化后学生编号的vector中,并在输出前排序;

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int getnum(string s) {
	int id=0;
	for (int i = 0; i < 3; i++) {
		id = id * 26 + s[i] - 'A';
	}
	id = id * 10 + s[3] - '0';
	return id;
}

const int maxn = 26 * 26 * 26 * 10 + 10;
vector<int> v[maxn];

int main() {
	int n, k, no, num, id;
	scanf("%d %d", &n, &k);
	for (int i = 0; i < k; i++) {
		char name[9];
		scanf("%d%d", &no, &num);
		for (int j = 0; j < num; j++) {
			scanf("%s", name);
			id = getnum(name);
			v[id].push_back(no);
		}
	}
	for (int i = 0; i < n; i++) {
		char name[9];
		scanf("%s", name);
		int id = getnum(name);
		sort(v[id].begin(), v[id].end());
		printf("%s %d", name, v[id].size());
		for (int j = 0; j < v[id].size(); j++) {
			printf(" %d", v[id][j]);
		}
		printf("\n");
	}
	return 0;
}```

猜你喜欢

转载自blog.csdn.net/weixin_44705116/article/details/102715302