题目例如以下:

Zhejiang University has 40000 students and provides 2500 courses. Now given the registered course list of each student, you are supposed to output the student name lists of all the courses.

Input Specification:

Each input file contains one test case. For each case, the first line contains 2 numbers: N (<=40000), the total number of students, and K (<=2500), the total number of courses. Then N lines follow, each contains a student's name (3 capital English letters plus a one-digit number), a positive number C (<=20) which is the number of courses that this student has registered, and then followed by C course numbers. For the sake of simplicity, the courses are numbered from 1 to K.

Output Specification:

For each test case, print the student name lists of all the courses in increasing order of the course numbers. For each course, first print in one line the course number and the number of registered students, separated by a space. Then output the students' names in alphabetical order. Each name occupies a line.

Sample Input:

10 5
ZOE1 2 4 5
ANN0 3 5 2 1
BOB5 5 3 4 2 1 5
JOE4 1 2
JAY9 4 1 2 5 4
FRA8 3 4 2 5
DON2 2 4 5
AMY7 1 5
KAT3 3 5 4 2
LOR6 4 2 4 1 5

Sample Output:

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

这是一道比較简单的统计、输出题目,由于输出不涉及查询,而是顺序输出。因此不必使用map进行倒排索引。仅仅须要给每门课一个vector<char*>,把全部选这门课的人压入对应容器,然后按字典序排序,最后输出。

须要注意的是。对于字符处理的题目,要尽量使用char*而避免使用string,尽管string非常方便,可是对于string的比較和拷贝操作会消耗大量时间。easy超时。

char*没有string好用,可是在c++特性下我么能够使用char* name = new char[4];来创建一个刚好容纳名字的空间,然后把它压入容器中。

对于char*的比較,刚開始我使用的是strcmp,可是它是s1<s2返回-1,s1==s2返回0,s1>s2返回1,而sort函数默认使用<比較,返回1代表满足,因此二者不是非常匹配,我最后採用了手动比較每一位的方法。

代码例如以下:

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <map>
#include <vector>
#include <string>
#include <string.h>
#include <algorithm>using namespace std;int compare(const char *name1, const char *name2){for(int i = 0; i < 4; i++){if(name1[i] < name2[i]){return 1;}else if(name1[i] == name2[i]){continue;}else{return 0;}}}int main()
{int N,K,C,num;cin >> N >> K;vector<vector<char*> > course(K+1);for(int i = 0; i < N; i++){char* name = new char[4];scanf("%s%d",name,&C);for(int j = 0; j < C; j++){scanf("%d",&num);course[num].push_back(name);}}for(int j = 1; j <= K; j++){sort(course[j].begin(),course[j].end(),compare);printf("%d %d\n",j,course[j].size());for(int k = 0; k < course[j].size(); k++){printf("%s\n",course[j][k]);}}return 0;
}

1047. Student List for Course (25)相关推荐

  1. 【超时原因】1047 Student List for Course (25 分)

    立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 Zhejiang University has 40,000 students and provides 2,500 course ...

  2. 1047 Student List for Course (25 分)【难度: 简单 / 知识点: 模拟】

    https://pintia.cn/problem-sets/994805342720868352/problems/994805433955368960 注意用scanf 和 printf 不然会T ...

  3. 【PAT甲级 vector string排序】1047 Student List for Course (25 分) 含别人的做法

    题目 样例输出 1 4 ANN0 BOB5 JAY9 LOR6 2 7 ANN0 BOB5 FRA8 JAY9 JOE4 KAT3 LOR6 3 1 BOB5 4 7 BOB5 DON2 FRA8 J ...

  4. PAT:1047. Student List for Course (25) AC

    #include<stdio.h> #include<string.h> #include<vector> #include<algorithm> us ...

  5. PAT甲级1047 Student List for Course:[C++题解] 哈希表

    文章目录 题目分析 题目链接 题目分析 输入样例: 10 5 ZOE1 2 4 5 ANN0 3 5 2 1 BOB5 5 3 4 2 1 5 JOE4 1 2 JAY9 4 1 2 5 4 FRA8 ...

  6. PAT甲级题目翻译+答案 AcWing(模拟)

    1008 Elevator (20 分) 思路 :last可能等于cur,而无论是否相等,res都是+5的 #include <iostream>using namespace std;i ...

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

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

  8. 刷PAT甲级的各题思路、细节以及遇到的问题记录

    1001 A+B Format (20分) 因为一定会用到字符串,而string非常好用,但是用的时候一定要注意不能越界访问,否则会在运行时出现abort() has been called. 100 ...

  9. PAT甲级1042~1055

    前言:距离四级考试剩23天,PAT甲级考试剩24天 对PAT甲级练习题做总结 1042 Shuffling Machine (20 分) 题目大意: 重复给出排列方式,把放在下标 i i i的牌调换到 ...

最新文章

  1. openNebulafrontEnd ComputeNode 配置记录
  2. CSS设置样式时,鼠标移动到div上,发生抖动问题解决办法
  3. hp打印机怎么连接电脑_hp打印机驱动怎么共享 惠普打印机如何安装【详解】
  4. matlab中find函数简单用法
  5. sign python_python机器学习
  6. Codeforces Round #529 (Div. 3) E. Almost Regular Bracket Sequence (括号配对,前缀和)
  7. 常见的 Error 和 Exception
  8. java 解析 manifest_解析AndroidManifest.xml之AXMLParser.java | 学步园
  9. 用于zsh的插件incr(目录提示和补全)
  10. eclipse 中文_谁说API必须用英文?中文API的Java库可以有!
  11. Mybatis 中更新方法: updateByPrimaryKeySelective() 和 updateByPrimaryKey() 的区别
  12. script 标签到底该放在哪里
  13. SQL Server中的STUFF函数的使用
  14. python 全栈开发,Day36(作业讲解(大文件下载以及进度条展示),socket的更多方法介绍,验证客户端链接的合法性hmac,socketserver)...
  15. 应用开发框架之——业务规则脚本化
  16. android平台db4o使用示例
  17. sca60c使用程序_使用PHP的SDO和SCA扩展
  18. 苹果服务器修改,82559修改MAC及服务器版本网卡教程!
  19. 基于dsp语音降噪算法c语言,基于DSP的语音降噪实时实现.PDF
  20. 华为外包数据库面试问题分享20211225

热门文章

  1. 一个判断字符串是否是数字的正则表达式
  2. 下载华为交换机MIB参考文件并使用snmpwalk获取OID信息
  3. AVFoundation之录音及播放
  4. 一道百度前端线上笔试题
  5. HttpModule
  6. sql截取字符串并把字符串插入到表中的存储过程
  7. Live meeting+OCS 二次开发手记
  8. ORA-00923: FROM keyword not found where expected(单双引号)
  9. 函数作用域,匿名函数
  10. arcgis server 10.4 安装与授权