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

    没有想到以二维数组 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
    ",i,course[i].size());//第i门课的学生数
            sort(course[i].begin(),course[i].end(),cmp);
            for(int j =0;j<course[i].size();++j){
                printf("%s
    ",name[course[i][j]]);
            }
        }
        system("pause");
        return 0;
    } 
  • 相关阅读:
    第七次
    第六次作业
    第五次作业
    第四次作业
    百度网盘生成二维码api
    【css3】--四种气泡
    纯CSS气泡框实现方法探究
    三种带箭头提示框总结实例
    纯CSS实现气泡框
    Windows 上 GitHub Desktop 的操作
  • 原文地址:https://www.cnblogs.com/JasonPeng1/p/12199292.html
Copyright © 2011-2022 走看看