1047 Student List for Course (25 分)
 

Zhejiang University has 40,000 students and provides 2,500 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 (≤), the total number of students, and K (≤), 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 (≤) 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

题意:

建立一个课程->学生的表即可。由于课程编号是从1-K,所以可以直接用vector当表。

题解:

用string型的vector数组记录每个课程中的学生名字,输出前对其排序。要注意用cout的话最后一个点会超时。

string scanf()

s.resize(); //需要预先分配空间
scanf("%s", &s[]);

string printf()

string s;
s="fdasf";
printf("%s\n",s.c_str());

AC代码:

#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<map>
#include<string>
#include<cstring>
using namespace std;
vector<string>v[];
int main(){
int n,k;
scanf("%d %d",&n,&k);
for(int i=;i<=k;i++) v[i].clear();
for(int i=;i<=n;i++)
{
string s;
/*s.resize(10); //需要预先分配空间
scanf("%s", &s[0]);*/
cin>>s;
int m;
scanf("%d",&m);
for(int j=;j<=m;j++){
int x;
scanf("%d",&x);
v[x].push_back(s);
}
}
for(int i=;i<=k;i++){
printf("%d %d\n",i,v[i].size());
sort(v[i].begin(),v[i].end());
for(int j=;j<v[i].size();j++){
printf("%s\n",v[i].at(j).c_str());
}
}
return ;
}

字符串哈希和反哈希:

#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<map>
#include<string>
#include<cstring>
using namespace std;
vector<int>v[];
char s[];
int getID(char name[]){
int id=;
for(int i=;i<;i++){
id=id*+(name[i]-'A');
}
id=id*+name[]-'';
return id;
}
int main(){
int n,k;
scanf("%d %d",&n,&k);
for(int i=;i<=k;i++) v[i].clear();
for(int i=;i<=n;i++)
{
scanf("%s",&s);
int m;
scanf("%d",&m);
for(int j=;j<=m;j++){
int x;
scanf("%d",&x);
v[x].push_back(getID(s));
}
}
for(int i=;i<=k;i++){
printf("%d %d\n",i,v[i].size());
sort(v[i].begin(),v[i].end());
for(int j=;j<v[i].size();j++){
int x=v[i].at(j);
string s="";
char c=x%+'';
s=s+c;
x=x/;
for(int kk=;kk<=;kk++){
c=x%+'A';
s=c+s;
x=x/;
}
printf("%s\n",s.c_str());
}
}
return ;
}

最新文章

  1. 阿里云CentOS7系列二 -- 安装Tomcat7的方法
  2. struts2拦截器+监听器 .
  3. IOS 蓝牙相关-连接外设的代码实现(2)
  4. job interview
  5. Android学习笔记(十三)SharedPreference必须掌握的基础
  6. 微信开发第4章 通过accesstoken获取用户标签管理
  7. C++ Primer之 十二章 类
  8. BZOJ 1770: [Usaco2009 Nov]lights 燈( 高斯消元 )
  9. linux下的数据库管理工具phpmyadmin安装以及文件大小限制的配置修改
  10. Linux Select之坑
  11. 双刃剑MongoDB的学习和避坑
  12. jsp中的路径与跳转
  13. 转载 Java设计模式
  14. 从TXT文本文档向Sql Server中批量导入数据
  15. Confluence 6 配置 Web 代理支持
  16. Software tips
  17. SVN 常见报错
  18. hdu3400(三分套三分)
  19. [Beijing wc2012]算不出的算式
  20. Kylin使用笔记-1: 安装

热门文章

  1. JDBC课程2--实现Statement(用于执行SQL语句)--使用自定义的JDBCTools的工具类静态方法,包括insert/update/delete三合一
  2. 让你弄懂 call、apply、bind的应用和区别
  3. 算法:用户喜好--Map与List配合下的查找
  4. 在 windows 上安装 git 2.22
  5. MyBatsi学习
  6. Python 装饰器实现单列模式
  7. 黑魔法师之门 (magician)-并查集
  8. 十八.搭建Nginx服务器、配置网页认证、基于域名的虚拟主机、ssl虚拟主机
  9. linux系列(二十二):tar命令
  10. css添加了原始滚动条要隐藏滚动条的显示