码迷,mamicode.com
首页 > 编程语言 > 详细

C++ STL vector A1047 Student List for Course(25) (注意字符串型的存储方式:用char [N][5]来存储)

时间:2020-01-16 01:21:26      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:math   name   stl   负数   姓名   color   大量   http   nbsp   

没有想到以二维数组 char [N][5] 存放输入的姓名,自己尝试用vector<char> 失败了。

小技巧:如果排序时直接对字符串排序,那么会导致大量的字符串移动,非常耗时间,因此比较合适的做法是使用字符串的下标来代替字符串本身进行排序,这样消耗的时间会少得多

strcmp 的返回值不一定是 -1 , 0 , +1 ,也有可能是其他正数和负数。因此在写cmp函数时不能写strcmp的返回值等于-1 , 必须写 < 0 

技术图片

 

 

#include <bits/stdc++.h>
#include<math.h>
#include <string>
using namespace std;
const int maxn = 40010;//最大学生人数
const int maxc = 2510;//最大课程门数
char name[maxn][5];//maxn个学生
vector<int> course[maxc];//course[i]存放第i门课的所有学生编号
bool cmp(int a,int b){
    return strcmp(name[a],name[b]) < 0;
}
int main(){
    int n,k,c,courseID;
    scanf("%d%d",&n,&k);//学生人数及课程数
    for(int i = 0;i<n;++i){
        scanf("%s %d",name[i],&c);//学生姓名及选课数
        for(int j = 0;j<c;++j){
            scanf("%d",&courseID);
            course[courseID].push_back(i);//将学生i 加入第courseID门课中
        }
    }
    for(int i = 1;i<=k;++i){
        printf("%d %d\n",i,course[i].size());//第i门课的学生数
        sort(course[i].begin(),course[i].end(),cmp);
        for(int j =0;j<course[i].size();++j){
            printf("%s\n",name[course[i][j]]);
        }
    }
    system("pause");
    return 0;
} 

C++ STL vector A1047 Student List for Course(25) (注意字符串型的存储方式:用char [N][5]来存储)

标签:math   name   stl   负数   姓名   color   大量   http   nbsp   

原文地址:https://www.cnblogs.com/JasonPeng1/p/12199292.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!