1. 此题必须采用vector+hash的策略,否则最后一个用例超时,定义一个vector类型的数组,长度由名字的最大范围决定

vector<int> stus[26*26*26*10];

2. 起初我定义了结构体,里面用一个字符串存放学生的名字,vector存放学生的选课课程编号,但是完全没必要存放名字。

3. 哈希好处是,直接定位,大不了长度为零输出别的,而不是去遍历数组,比对字符串,这样会超时。

4. 注意将字符串转化成数字的函数写法

5. 如果内层不用vector而是也用数组,最后一组数据会让二维数组内存超限(哈希已经是空间换时间)。

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;
}

AC代码

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<bits/stdc++.h>
#include<stdlib.h>
#include<time.h>
#include<vector>using namespace std;
typedef long long LL;const int maxn = 10007;
const int MOD = 1000000007;
const int INF = 1000000000;//INF:下确界
const LL SUP = (1LL<<63)-1;//SUP:上确界
const double eps = 1e-5;vector<int> stus[26*26*26*10];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 query_n,course_n,course_idx,choose_n;char name[5];scanf("%d %d",&query_n,&course_n);for(int i=0;i<course_n;i++){scanf("%d %d",&course_idx,&choose_n);for(int j=0;j<choose_n;j++){scanf("%s",name);int id = getId(name);stus[id].push_back(course_idx);}}for(int i=0;i<query_n;i++){scanf("%s",name);int id = getId(name);if(stus[id].size()){//查到当前学生所选的课程数不为0 printf("%s ",name);printf("%d ",stus[id].size());//输出学校编号之前,需要按照从小到大进行排序sort(stus[id].begin(),stus[id].end()); for(int k=0;k<stus[id].size();k++){printf("%d",stus[id][k]);if(k!=stus[id].size()-1)printf(" ");}printf("\n");}else printf("%s 0\n",name);} return 0;
}

1039 Course List for Student相关推荐

  1. PAT甲级1039 Course List for Student :[C++题解]排序、哈希表

    文章目录 题目分析 题目链接 题目分析 此题以为会卡时间,特意使用scanf来读,结果本题不是这里卡时间.而是看查询效率高不高. 考察hash 表,然后vector排个序即可. ac代码 #inclu ...

  2. 1039. Course List for Student (25)

    题目链接:http://www.patest.cn/contests/pat-a-practise/1039 题目: 1039. Course List for Student (25) 时间限制 2 ...

  3. PAT (Advanced Level) Practis 1039 Course List for Student (25)

    1039. Course List for Student (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Y ...

  4. 1039 Course List for Student (25 分)_33行代码AC

    立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 Zhejiang University has 40000 students and provides 2500 courses. ...

  5. [哈希]PAT1039 Course List for Student

    1039. Course List for Student (25) 时间限制 200 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Y ...

  6. 【PAT笔记】C++标准模板库STL(一)——vector的用法和示例

    1.vector的常见用法 vector翻译为向量,但是用"长短根据需要而自动改变的数组"更容易记忆.如果要使用vector,则需要用到头文件#include <vector ...

  7. PAT甲级题目翻译+答案 AcWing(排序)

    1012 The Best Rank (25 分) 题意 :给ID和3门成绩,计算其平均分A,输出每位学生最好的排名,A>C>M>E 思路 :如果将所需的若干个元素中使第一个元素为后 ...

  8. 【最新合集】PAT甲级最优题解(题解+解析+代码)

    以下每道题均是笔者多方对比后, 思考整理得到的最优代码,欢迎交流! 共同成长哇.可以和博主比拼一下谁刷的更快~ 欢迎收藏.欢迎来玩儿 PAT题解目录 题号 标题 题解 分类 使用算法 1001 A+B ...

  9. PAT甲级训练合集(1-70)

    本章题解跳转 考点 P1001 数字的数组表示和处理 P1002 多项式的数组表示和处理 P1003 深度优先搜素 P1004 深度优先搜素 P1005 哈希表 P1006 P1007 数组子区间求和 ...

最新文章

  1. 微服务化之前需要先无状态化和容器化
  2. 配置MM模块material management几个常见的错误
  3. c语言变凉存储性,C语言数据的表示和存储(IEEE 754标准)
  4. kotlin 中 lambda 表达式的 return 行为
  5. 13.2.6 会话跟踪技术
  6. 【转】 JMeter学习(二十四)linux启动jmeter,执行./jmeter.sh报错解决方法
  7. 新东方java开发待遇_新东方教师薪酬与考核曝光!拿去即用(仅供参考)
  8. 研究员发现 Google Cloud 项目中的 SSRF 漏洞,获1万美元奖金
  9. Requests接口测试(五)
  10. 智能优化算法:细菌觅食优化算法 - 附代码
  11. c++写入二进制、TXT文件,读取二进制、TXT文件,切分字符串(入数组)
  12. 数据库中的左连接和右连接
  13. android旧版本运行器下载,有没有办法让新版安卓系统运行以前老安卓版本的软件?...
  14. 调节效应分析时简单斜率图或交互效应图出现负数截距?
  15. Free Download Manager
  16. SpringBoot项目去除druid监控的阿里广告
  17. 秒表计时器怎么读_秒表使用说明书
  18. python数据分析(三)——pandas缺失值处理
  19. 使用ZBrush软件的画布功能有什么技巧吗?
  20. 串口通信基础(二)——传输方式(方向)、错误校验、传输速率与传输距离

热门文章

  1. 利用runtime实现KVO
  2. Android笔记之使用LocationManager获取经纬度
  3. Linux-LNMP(静态元素不记录日志和过期时间,防盗链,解析php,代理,支持ssl)
  4. 《ABAQUS 6.14超级学习手册》——1.2 ABAQUS分析模块
  5. 怎样写出一个较好的高速排序程序
  6. java web学习项目20套源码完整版
  7. 范登读书解读《亲密关系》(婚姻、爱情) 笔记
  8. 想要学好Go语言的必须知道的一个小技巧
  9. 分布式版本控制系统 Git 教程
  10. Veeam 跻身 Gartner 2016 数据中心备份和恢复软件魔力象限领导者象限