コースA1047学生一覧(25分)

まず、技術的な概要

  1. 湖を見るために最初のトピックは、条件は特に注意して、そのような終了サイクルのための条件として、前方に置く重要です。
  2. そして、このトピックは主に、アカウントへのベクターの使用を取っているだけでなく、注意がstd名前空間を使用して追加する必要があります。
  3. 出力形式、タイトルが空白か何かせずに、最後の行は、ライン上で通常のラップに合わせて、ない余分何を要求していない場合。
  4. ここでは、名前、番号と名前を格納した文字列の2次元配列を使用することでも巧みに、文字列の下に記録されるべき恥ずかしい事態を避け、選択した各コースに学生の数を記録するために、これを使用しています。そして、選択科目の学生の数を記録するために、ベクトルコンテナを開き、最後のソートができます。
  5. 店舗への文字列の多くは、文字列を使用しない場合は、2次元することができchar配列を、使用しています。次のように、小から大アルファベットCMPを比較する文字列のサイズは、使用される場合:
bool cmp(int a, int b){
    //这里是按字符串从小到大,如果相反改变下面中小于号为大于号即可,同时stu是提前声明的全局变量二维字符串数组
    return strcmp(stu[a], stu[b]) < 0;
}

第二に、参照コード

#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 40010;
const int K = 2510;
char stu[N][5];
vector<int> q[K];
bool cmp(int a, int b){
    return strcmp(stu[a], stu[b]) < 0;
}
int main(){
    int n,k;
    scanf("%d%d", &n, &k);
    int num = 0;
    int course = 0;
    for(int i = 0; i < n; i++){
        scanf("%s %d", stu[i], &num);
        for(int j = 0; j < num; j++){
            scanf("%d", &course);
            q[course].push_back(i);
        }
    }
    for(int i = 1; i <= k; i++){
        sort(q[i].begin(), q[i].end(), cmp);
        printf("%d %d\n", i, q[i].size());
        for(int j = 0; j < q[i].size(); j++){
            printf("%s\n", stu[q[i][j]]);
        }   
    }
    return 0;
}

おすすめ

転載: www.cnblogs.com/tsruixi/p/11915668.html