数据结构课设 打印学生选课清单 (Hash)
2016-03-21 15:44
639 查看
5-24 打印学生选课清单 (25分)
假设全校有最多40000名学生和最多2500门课程。现给出每门课的选课学生名单,要求输出每个前来查询的学生的选课清单。
上学期有道打印学生选课名单,直接暴力排序就过了,然而这题要用到哈希。。唉,上学期数据结构没学好啊,连为什么这样哈希都不知道。。
假设全校有最多40000名学生和最多2500门课程。现给出每门课的选课学生名单,要求输出每个前来查询的学生的选课清单。
输入格式:
输入的第一行是两个正整数:N(\le≤40000),为前来查询课表的学生总数;K(\le≤2500),为总课程数。此后顺序给出课程1到K的选课学生名单。格式为:对每一门课,首先在一行中输出课程编号(简单起见,课程从1到K编号)和选课学生总数(之间用空格分隔),之后在第二行给出学生名单,相邻两个学生名字用1个空格分隔。学生姓名由3个大写英文字母+1位数字组成。选课信息之后,在一行内给出了N个前来查询课表的学生的名字,相邻两个学生名字用1个空格分隔。输出格式:
对每位前来查询课表的学生,首先输出其名字,随后在同一行中输出一个正整数C,代表该生所选的课程门数,随后按递增顺序输出C个课程的编号。相邻数据用1个空格分隔,注意行末不能输出多余空格。输入样例:
10 5 1 4 ANN0 BOB5 JAY9 LOR6 2 7 ANN0 BOB5 FRA8 JAY9 JOE4 KAT3 LOR6 3 1 BOB5 4 7 BOB5 DON2 FRA8 JAY9 KAT3 LOR6 ZOE1 5 9 AMY7 ANN0 BOB5 DON2 FRA8 JAY9 KAT3 LOR6 ZOE1 ZOE1 ANN0 BOB5 JOE4 JAY9 FRA8 DON2 AMY7 KAT3 LOR6
输出样例:
ZOE1 2 4 5 ANN0 3 1 2 5 BOB5 5 1 2 3 4 5 JOE4 1 2 JAY9 4 1 2 4 5 FRA8 3 2 4 5 DON2 2 4 5 AMY7 1 5 KAT3 3 2 4 5 LOR6 4 1 2 4 5
上学期有道打印学生选课名单,直接暴力排序就过了,然而这题要用到哈希。。唉,上学期数据结构没学好啊,连为什么这样哈希都不知道。。
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <vector> using namespace std; int mhash(char * name) { return (name[0] - 'A') * 26 * 26 * 10 + (name[1] - 'A') * 26 * 10 + (name[2] - 'A') * 10 + name[3] - '0'; } vector<int> stu[26 * 26 * 26 * 10 + 1]; int main() { int N, K; scanf("%d %d", &N, &K); int i, j; char name[5]; int id, n; for(i = 0; i < K; i++) { scanf("%d %d", &id, &n); for(j = 0; j < n; j++) { scanf("%s", name); int h = mhash(name); stu[h].push_back(id); } } for(i = 0; i < N; i++) { scanf("%s", name); int h = mhash(name); sort(stu[h].begin(), stu[h].end()); int s = stu[h].size(); printf("%s %d", name, s); for(j = 0; j < s; j++) { printf(" %d", stu[h][j]); } printf("\n"); } return 0; }
相关文章推荐
- Python 数据结构与算法——选择排序(迭代版、递归版)
- 数据结构(java语言描述)链栈的使用——表达式求值
- 【小镇的技术天梯】从头写数据结构,C语言实现双向链表
- 数据结构6-树
- Python 数据结构与算法——插入排序(insertion sort)
- hdu 3874(树状数组+离线算法)
- A题常用数据结构
- 数据结构课设 任务调度的合理性 (拓扑排序)
- Operating Systems: Three Easy Pieces(操作系统:三个简单方面)4.5数据结构4.6总结
- 数据结构与算法笔记(一)单链表
- 数据结构5-队列
- 数据结构1 -- 链表的基本方法实现
- 数据结构4-堆栈
- linux2.6内核的DAC数据结构(传统9Bit模式、ACL模式)
- 数据结构与算法javascript描述之队列
- Python 数据结构与算法——从某个列表中找出两个彼此最接近但不相等的数
- javascript算法与数据结构之栈
- Python 数据结构与算法——侏儒排序
- 数据结构7—线索二叉树 (java)
- 数据结构笔记-----二叉排序树和哈希表