7-5 打印选课学生名单(25 point(s))

假设全校有最多40000名学生和最多2500门课程。现给出每个学生的选课清单,要求输出每门课的选课学生名单。

输入格式:

输入的第一行是两个正整数:N(≤40000),为全校学生总数;K(≤2500),为总课程数。此后N行,每行包括一个学生姓名(3个大写英文字母+1位数字)、一个正整数C(≤20)代表该生所选的课程门数、随后是C个课程编号。简单起见,课程从1到K编号。

输出格式:

顺序输出课程1到K的选课学生名单。格式为:对每一门课,首先在一行中输出课程编号和选课学生总数(之间用空格分隔),之后在第二行按字典序输出学生名单,每个学生名字占一行。

输入样例:

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

输出样例:

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

思路

可以用VECTOR 来保存 每门课下 的学生名字

然后输出的时候 对每门课 对应的那个 VECTOR 进行排序就可以了

然后 因为数据量大 不能用STRING 也就是 不能用 CIN 输入 会超时

然后 可以用 C风格字符串

然后一种思路就是

因为学生姓名 的格式 是固定的

3个大写英文字母+1位数字

所以 我们可以将三个大写英文字母对应的 ASCII 码 保存下来 形成一串数字

比如 AAA1

就对应于 65656501

这串数字 就对应 于 这个 姓名

并且 可以进行比较

输出的时候 输出其对应的字母就可以了

AC代码

#include <cstdio>
#include <cstring>
#include <ctype.h>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <map>
#include <stack>
#include <set>
#include <numeric>
#include <sstream>
#include <iomanip>
#include <limits> #define CLR(a) memset(a, 0, sizeof(a))
#define pb push_back using namespace std;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
typedef pair<string, int> psi;
typedef pair<string, string> pss; const double PI = 3.14159265358979323846264338327;
const double E = exp(1);
const double eps = 1e-30; const int INF = 0x3f3f3f3f;
const int maxn = 3e3 + 5;
const int MOD = 1e9 + 7; struct Node
{
int a[4];
int name;
}temp; vector <Node> ans[maxn]; bool comp(Node x, Node y)
{
return x.name < y.name;
} int main()
{
int n, k;
scanf("%d%d ", &n, &k);
char a[3];
int b;
int tot, id;
int name;
string s;
for (int i = 0; i < n; i++)
{
scanf(" %c %c %c %d", &temp.a[0], &temp.a[1], &temp.a[2], &temp.a[3]);
temp.name = 0;
for (int i = 0; i < 4; i++)
temp.name = temp.name * 100 + temp.a[i];
scanf("%d", &tot);
for (int j = 0; j < tot; j++)
{
scanf("%d", &id);
ans[id].pb(temp);
}
}
for (int i = 1; i <= k; i++)
{
printf("%d %d\n", i, ans[i].size());
if (ans[i].size())
{
sort(ans[i].begin(), ans[i].end(), comp);
vector <Node>::iterator it;
for (it = ans[i].begin(); it != ans[i].end(); it++)
printf("%c%c%c%d\n", (*it).a[0], (*it).a[1], (*it).a[2], (*it).a[3]);
}
}
}

7-5 打印选课学生名单(25 point(s)) 【排序】的更多相关文章

  1. PTA 习题集5-18 打印选课学生名单(哈希)

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

  2. C++第15周(春)项目2 - 用文件保存的学生名单

    课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759.内有完整教学方案及资源链接 本程序中须要的相关文件.请到http://pa ...

  3. Python2爬取学生名单

    背景: 学校的网站可以根据学号查学生姓名和成绩(三年后的补充:借助sql注入漏洞跳过密码,但是该网站现在已经被弃用了),所以我希望通过Python的爬虫得到年级所有同学的学号与姓名对应表. 实现: 首 ...

  4. [Oracle/SQL]找出id为0的科目考试成绩及格的学生名单的四种等效SQL语句

    本文是受网文 <一次非常有意思的SQL优化经历:从30248.271s到0.001s>启发而产生的. 网文没讲创建表的数据过程,我帮他给出. 创建科目表及数据: CREATE TABLE ...

  5. python打印9宫格25宫格81宫格.....

    """ 2 问题描述: 3 给定一个奇数(num),生成一个横竖斜加起来的和相等 4 问题解析: 5 这其实就是一个九宫格的问题 6 九宫格问题的解答技巧: 7 1要放在 ...

  6. 现有有N个学生的数据记录,每个记录包括学号、姓名、三科成绩。 编写一个函数input,用来输入一个学生的数据记录。 编写一个函数print,打印一个学生的数据记录。 在主函数调用这两个函数,读取N条记录输入,再按要求输出。 N<100

    #include <iostream> using namespace std; struct student {char num[100];  char name[100];  int ...

  7. 2015-2016-1 学期《软件工程》学生名单-- PS:教材使用《构建之法》第二版 --邹欣著

    1208053044 王威 男 1313023001 饶阳梅 女 1313023002 应蕾蕾 女 1313023004 袁立萍 女 1313023005 黎洋阳 女 1313023006 蒋欣 女 ...

  8. IO流的练习4 —— 键盘录入学生成绩信息,进行排序后存入文本中

    需求: 键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低存入文本文件 分析: A:创建学生类 B:创建集合对象 TreeSet<Student> C:键盘录入学 ...

  9. 在Ecshop后台打印订单页面将商品按货号排序

    ECSHOP后台管理里的“打印订单" 页面里的商品排序有点乱,现在想改成按序号来排序,修改方法如下 下面是在2.7.2基础上做的修改 打开 admin/order.php  文件 找到(大约 ...

随机推荐

  1. LeetCode OJ--Rotate Image

    http://oj.leetcode.com/problems/rotate-image/ 将矩阵顺时针旋转90度.要求为原地算法. 注意对输入的测试,矩阵为空,长度为1,为2时…… #include ...

  2. 饼系列—圈饼 doughnut

    chartControl属性 ApplicationSettings: Name:控件名字 AccessibleDescription: ??? AccessibleName:??? Accessib ...

  3. git常用语句

    1.安装git,也适用于升级 yum -y install gcc zlib-devel openssl-devel curl-devel \ expat-devel gettext-devel pe ...

  4. python pip包管理器安装

    下载   http://peak.telecommunity.com/dist/ez_setup.py 执行:python ez_setup.py 下载:  http://pypi.python.or ...

  5. debug : 调试主进程启动的子进程

    http://blog.csdn.net/lostspeed/article/details/10109867

  6. 分享tiny4412,emmc烧录u-boot, 支持fastboot模式烧写emmc

    转载 : http://www.arm9home.net/read.php?tid-83474.html 本人是第一次在此发帖,希望大家多多支持,发帖目的是为了分享,分享的目的是传递开源的精神.Tin ...

  7. Oracle SOA Suit Medicator and OSB

    Medicator和OSB (Oracle Service Bus)存在的目的,从架构的设计模式上看,和解耦多态等理念非常的相似. 通过Proxy代理的方式,把真正某个Service的实现进行隐藏,让 ...

  8. HDU 5289 Assignment(单调队列)

    题意:给T足数据,然后每组一个n和k,表示n个数,k表示最大同意的能力差,接下来n个数表示n个人的能力,求能力差在k之内的区间有几个 分析:维护一个区间的最大值和最小值,使得他们的差小于k,于是採用单 ...

  9. vue 避免渲染时闪烁

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  10. 安装odoo 9实录

    安装Ubuntu,省略 下载 odoo源码 使用 git 下载源码 mkdir /opt/openerp/server cd /opt/openerp/server git clone https:/ ...