我做这道题之前我一直以为set是一个省排序步骤的容器结果,set的插入操作是logn由于每个元素都得我们输入然后再插入所以我们就会将时间复杂度再加一个档次n*logn,所以这就是我超时的原因。

前讲我们先说到这里,我们先来思考这道题,对于每个课,选的人可以是多个,且一个人也可以选多个课,但看这道题的输出格式,就是每个课我们都需要统计人数,所以我们定义一个二维vector。其中列储存我们的课名,而行储存我们的学生名所以我们单个元素是string

定义代码如下

vector<vector<string> >name(num2);//这个num2是课程数,因为这个课程数要输入,所以我们可以直接获取

之后就是我们的读入过程了,构建一个循环每个循环都有人选课,对课程数也构成一个循环,具体代码如下。

char a[5];int b,c;for(int i=0;i<num1;i++){scanf("%s %d",a,&b); for(int i1=0;i1<b;i1++){scanf("%d",&c);name[c-1].push_back(a);}}

输入之后呢我们的每一门课程就有了对应的人和人数。现在就是输出阶段,因为要排序所以我们将

两个字符串比较我们用sort.其中cmp的条件是

bool cmp(string a,string b)
{return a<b;
}

字母小的排前面。之后就是输出了,这道题有个硬性要求,就是用cin,和cout会超时,所以我们用string的转化输出方式,具体代码如下

for(int i=0;i<num2;i++){printf("%d %d\n",i+1,name[i].size());sort(name[i].begin(),name[i].end(),cmp);for(int i1=0;i1<name[i].size();i1++)printf("%s\n",name[i][i1].c_str());}

这道题的具体代码如下

#include<bits/stdc++.h>
using namespace std;
bool cmp(string a,string b)
{return a<b;
}
int main()
{   int num1,num2;scanf("%d %d",&num1,&num2);vector<vector<string> >name(num2);char a[5];int b,c;for(int i=0;i<num1;i++){scanf("%s %d",a,&b); for(int i1=0;i1<b;i1++){scanf("%d",&c);name[c-1].push_back(a);}}for(int i=0;i<num2;i++){printf("%d %d\n",i+1,name[i].size());sort(name[i].begin(),name[i].end(),cmp);for(int i1=0;i1<name[i].size();i1++)printf("%s\n",name[i][i1].c_str());}}

7-5 打印选课学生名单(c++)相关推荐

  1. 打印选课学生名单 (25分)

    打印选课学生名单 (25分) 假设全校有最多40000名学生和最多2500门课程.现给出每个学生的选课清单,要求输出每门课的选课学生名单. 输入格式: 输入的第一行是两个正整数:N(≤40000),为 ...

  2. 5 打印选课学生名单 (25分)

    5 打印选课学生名单 (25分) 假设全校有最多40000名学生和最多2500门课程.现给出每个学生的选课清单,要求输出每门课的选课学生名单. 输入格式: 输入的第一行是两个正整数:N(≤40000) ...

  3. 5 打印选课学生名单 (25 分)

    5 打印选课学生名单 (25 分) 假设全校有最多40000名学生和最多2500门课程.现给出每个学生的选课清单,要求输出每门课的选课学生名单. 输入格式: 输入的第一行是两个正整数:N(≤40000 ...

  4. 5 打印选课学生名单

    5 打印选课学生名单 分数 25 作者 DS课程组 单位 浙江大学 假设全校有最多40000名学生和最多2500门课程.现给出每个学生的选课清单,要求输出每门课的选课学生名单. 输入格式: 输入的第一 ...

  5. 7-47 打印选课学生名单 (25分))

    7-47 打印选课学生名单 (25分) 假设全校有最多40000名学生和最多2500门课程.现给出每个学生的选课清单,要求输出每门课的选课学生名单. 输入格式: 输入的第一行是两个正整数:N(≤400 ...

  6. PTA 7-47 打印选课学生名单分数 25 分 (C 邻接表+二叉排序树 )

    题目: 假设全校有最多40000名学生和最多2500门课程.现给出每个学生的选课清单,要求输出每门课的选课学生名单. 输入格式: 输入的第一行是两个正整数:N(≤40000),为全校学生总数:K(≤2 ...

  7. 7-47 打印选课学生名单 (25 分)(两种做法)(思路加详解+map+vector做法+最后一个点超时解决)+兄弟们冲丫丫

    一:题目 假设全校有最多40000名学生和最多2500门课程.现给出每个学生的选课清单,要求输出每门课的选课学生名单. 输入格式: 输入的第一行是两个正整数:N(≤40000),为全校学生总数:K(≤ ...

  8. 7-47 打印选课学生名单 (25分)C++

    假设全校有最多40000名学生和最多2500门课程.现给出每个学生的选课清单,要求输出每门课的选课学生名单. 输入格式: 输入的第一行是两个正整数:N(≤40000),为全校学生总数:K(≤2500) ...

  9. 打印选课学生名单(25)

    假设全校有最多40000名学生和最多2500门课程.现给出每个学生的选课清单,要求输出每门课的选课学生名单. 输入格式: 输入的第一行是两个正整数:N(≤40000),为全校学生总数:K(≤2500) ...

  10. PTA 7-47 打印选课学生名单

    本题考点: 排序的应用 假设全校有最多40000名学生和最多2500门课程.现给出每个学生的选课清单,要求输出每门课的选课学生名单. 输入格式: 输入的第一行是两个正整数:N(≤40000),为全校学 ...

最新文章

  1. [嵌入式]Bootloader的作用
  2. 电脑打开html不显示图片,网页不显示图片,详细教您网页不显示图片怎么解决
  3. java基础-泛型举例详解
  4. sequelize模型关联_关于Sequelize连接查询时inlude中model和association的区别详解
  5. figcaption html5,HTML5 figcaption 标签
  6. 鸿蒙历程和路标图,华为鸿蒙OS:为生态而生,亦为生态所累
  7. tidyr | 批量处理数据的前奏——数据嵌套化
  8. 自己动手写Docker系列 -- 5.4实现进入容器的namespace,exec命令
  9. 2018南华大学计算机学院,南华大学2019年排名第214位 较2018年下降32名
  10. 栈的亚特兰数与二叉树的前序中序遍历序列
  11. 在线qq客服的html代码生成器,js生成qq客服在线代码
  12. ppt科研绘图之通过vba一键导出pdf
  13. 电视浏览器Emotn V1.0.0.2+悟空跨屏电视输入法
  14. linux下给文件夹创建链接
  15. Linux:试管中的生命
  16. android红外遥控器按键键值,红外遥控实验键值设置
  17. 短信接口被恶意调用?企业短信防火墙+【中昱维信】短信验证码【Java】
  18. 问题分析工具 - 3 legged 5 why analysis
  19. 【数学】《离散数学中“群”的概念》
  20. FTDI 234XD USB转串口 PC识别串口固定的解决方法

热门文章

  1. serv-u 用户时间显示相差8小时_调好闹钟!4月8日凌晨,将迎来今年最大满月
  2. 如何用最短的时间找到初级数据分析工作?
  3. Ubuntu1804编译QWebEngine
  4. Mr.Alright---安卓N系统最近任务锁定功能实现
  5. 什么是App分发?有哪些分发平台可以选择?
  6. 使用计算机管理文件教后反思,《管理计算机中的文件》教学设计
  7. 买了智能电视之后还需要购买搭配机顶盒吗?
  8. 奇瑞QQ序列首款新能源汽车QQ冰淇淋上市;上海嘉定集中发展氢燃料电池和ICV | 能动...
  9. window、linux、mac 文件路径禁止字符, 路径长度【全网总结】
  10. 搜狗在任务栏的“天猫618炒鸡红包”如何关闭