1039 Course List for Student
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相关推荐
- PAT甲级1039 Course List for Student :[C++题解]排序、哈希表
文章目录 题目分析 题目链接 题目分析 此题以为会卡时间,特意使用scanf来读,结果本题不是这里卡时间.而是看查询效率高不高. 考察hash 表,然后vector排个序即可. ac代码 #inclu ...
- 1039. Course List for Student (25)
题目链接:http://www.patest.cn/contests/pat-a-practise/1039 题目: 1039. Course List for Student (25) 时间限制 2 ...
- 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 ...
- 1039 Course List for Student (25 分)_33行代码AC
立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 Zhejiang University has 40000 students and provides 2500 courses. ...
- [哈希]PAT1039 Course List for Student
1039. Course List for Student (25) 时间限制 200 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Y ...
- 【PAT笔记】C++标准模板库STL(一)——vector的用法和示例
1.vector的常见用法 vector翻译为向量,但是用"长短根据需要而自动改变的数组"更容易记忆.如果要使用vector,则需要用到头文件#include <vector ...
- PAT甲级题目翻译+答案 AcWing(排序)
1012 The Best Rank (25 分) 题意 :给ID和3门成绩,计算其平均分A,输出每位学生最好的排名,A>C>M>E 思路 :如果将所需的若干个元素中使第一个元素为后 ...
- 【最新合集】PAT甲级最优题解(题解+解析+代码)
以下每道题均是笔者多方对比后, 思考整理得到的最优代码,欢迎交流! 共同成长哇.可以和博主比拼一下谁刷的更快~ 欢迎收藏.欢迎来玩儿 PAT题解目录 题号 标题 题解 分类 使用算法 1001 A+B ...
- PAT甲级训练合集(1-70)
本章题解跳转 考点 P1001 数字的数组表示和处理 P1002 多项式的数组表示和处理 P1003 深度优先搜素 P1004 深度优先搜素 P1005 哈希表 P1006 P1007 数组子区间求和 ...
最新文章
- 微服务化之前需要先无状态化和容器化
- 配置MM模块material management几个常见的错误
- c语言变凉存储性,C语言数据的表示和存储(IEEE 754标准)
- kotlin 中 lambda 表达式的 return 行为
- 13.2.6 会话跟踪技术
- 【转】 JMeter学习(二十四)linux启动jmeter,执行./jmeter.sh报错解决方法
- 新东方java开发待遇_新东方教师薪酬与考核曝光!拿去即用(仅供参考)
- 研究员发现 Google Cloud 项目中的 SSRF 漏洞,获1万美元奖金
- Requests接口测试(五)
- 智能优化算法:细菌觅食优化算法 - 附代码
- c++写入二进制、TXT文件,读取二进制、TXT文件,切分字符串(入数组)
- 数据库中的左连接和右连接
- android旧版本运行器下载,有没有办法让新版安卓系统运行以前老安卓版本的软件?...
- 调节效应分析时简单斜率图或交互效应图出现负数截距?
- Free Download Manager
- SpringBoot项目去除druid监控的阿里广告
- 秒表计时器怎么读_秒表使用说明书
- python数据分析(三)——pandas缺失值处理
- 使用ZBrush软件的画布功能有什么技巧吗?
- 串口通信基础(二)——传输方式(方向)、错误校验、传输速率与传输距离