まず、技術的な概要
- 湖を見るために最初のトピックは、条件は特に注意して、そのような終了サイクルのための条件として、前方に置く重要です。
- そして、このトピックは主に、アカウントへのベクターの使用を取っているだけでなく、注意がstd名前空間を使用して追加する必要があります。
- 出力形式、タイトルが空白か何かせずに、最後の行は、ライン上で通常のラップに合わせて、ない余分何を要求していない場合。
- ここでは、名前、番号と名前を格納した文字列の2次元配列を使用することでも巧みに、文字列の下に記録されるべき恥ずかしい事態を避け、選択した各コースに学生の数を記録するために、これを使用しています。そして、選択科目の学生の数を記録するために、ベクトルコンテナを開き、最後のソートができます。
- 店舗への文字列の多くは、文字列を使用しない場合は、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;
}