【1039】 Course List for Student (25)

题目描述

浙江大学有40000个学生,并开2500门课,给出所有课程的学生列表,输出每个学生的课程列表

输入

第一行 n(<=4000,学生人数) k(<=2500,课程数)
随后2k行:
一行:cid (课程id 1~k) Ni(课程id的学生数
第二行:Ni个学生name(三个字母+一个数字构成)
第2
k+1行为:
n个学生名字

输出:

按最后一行学生名字顺序输出(姓名,选修的课程数,课程id(需要按从小到大的顺序输出))

解题思路

将以学生姓名(string)为key,该生的课程列表(vector<int>)为value的map存储数据,并对value进行排序,并按照输入的名字顺序输出map的value.
但是这种方式会有一组数据超时,因此考虑将姓名不以string类型存储,将姓名以每个字母的ASCII码的形式计算转换为int类型( t = (((name[0] - 'A') * 26 + (name[1] - 'A')) * 26 + name[2] - 'A') * 26 + name[3] - '0';
).

代码

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int getkey(char *name) {
    int key = 0;
    for(int i = 0; i < 3; i++)
        key= 26 * key+ (name[i] - 'A');
    key= key * 10 + (name[3] - '0');
    return key;
}
int main() {
    int n, m;
    vector< vector<int> > students(175770);
    scanf("%d%d",&n, &m);
    int t;
    char name[5];
    int cid, cnums;
    for (int i = 0; i < m; i++) {
        scanf("%d %d", &cid, &cnums);
        for (int j = 0; j < cnums; j++) {
             scanf("%s",name);
             t = getkey(name);
             students[t].push_back(cid);
        }
    }   
    for (int i = 0; i < n; i++) {
         scanf("%s",name);
         t = getkey(name);
         printf("%s %lu", name, students[t].size());
         sort(students[t].begin(), students[t].end());
         for (int j = 0; j < students[t].size(); j++) {
            printf(" %d",students[t][j]);
        }
        printf("\n");
    }
        return 0;
}


···
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,019评论 19 139
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 13,207评论 0 13
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,768评论 18 399
  • 我发现CCTV6每天十点后放文艺片~以后每天看哦~ 单身就得死吗哈哈哈
    菠00阅读 1,603评论 0 0
  • 在这里我从来没有太多要求和想法,只想做个普通的不能在平凡的人,谁知一场意外险些让我躲避了灾难,我的平凡人生是短暂的...
    巷旧阅读 3,860评论 0 2

友情链接更多精彩内容