zoukankan      html  css  js  c++  java
  • 【算法笔记】A1047 Student List for Course

    https://pintia.cn/problem-sets/994805342720868352/problems/994805433955368960

    题意

      给出每个学生的选课情况,输出每节课选课的学生。

    思路

      参考了上机指南的代码,用char[n][5]存放学生姓名,vector<int> stulList[] 存放选每门课的学生编号,通过编号对应的姓名在vector数组里排序,妙啊

      试了试用set能不能AC,发现不行,用set<string>会超时,用set<char*>又不能自动排序还要自定义排序函数,用set<int>要去掉自动排序用sort排序跟用vector<int>没啥区别。综上所述用vector是最省时省力的方法。

     code

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 char name[40010][5];
     4 vector<int> stuList[2510];
     5 bool cmp(int a, int b){
     6     return strcmp(name[a], name[b]) < 0;
     7 }
     8 int main(){
     9     int n, k, c, courseId;
    10     scanf("%d%d", &n, &k);
    11     for(int i = 0; i < n; i++){
    12         scanf("%s %d", name[i], &c);
    13         for(int j = 0; j < c; j++){
    14             scanf("%d", &courseId);
    15             stuList[courseId].push_back(i);
    16         }
    17     }
    18     for(int i = 1; i <= k; i++){
    19         int size = stuList[i].size();
    20         printf("%d %d
    ", i, size);
    21         sort(stuList[i].begin(), stuList[i].end(), cmp);
    22         for(int j = 0; j < size; j++){
    23             printf("%s
    ", name[stuList[i][j]]);
    24         }
    25     }
    26     return 0;
    27 }
  • 相关阅读:
    【HDOJ】1224 Free DIY Tour
    【HDOJ】1494 跑跑卡丁车
    【HDOJ】1495 非常可乐
    ACMer
    find the nth digit
    A C
    已知六条边的边长,求四面体体积
    快速排序
    {A} + {B}
    素数回文
  • 原文地址:https://www.cnblogs.com/chunlinn/p/10694638.html
Copyright © 2011-2022 走看看