把这道题贴出来跟大家一起分享下;这题用vector不定数组有“神笔“之效,看到这题的第一思路是构建结构,然后对应每门课程以及学生的选择情况用简单数组来记录选择的课程 编号,以及用另一变量来记录这学生的选择课程总数。每门学生类推;不用说这样明显效率低,而且难得去写,最终题目也没ac出来
题目:<pat甲级1039>
题意:有N个学生,K门课,给出选择每门课的学生姓名,最后对于给出的N个学生的姓名的选课情况进行询问,要求按顺序给 出每个学生的选课情况;输出格式:学生 选择课程总数 选择的课程编号;注意最后不能有多余空格;
源码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include<vector>
using namespace std;
const int maxn = 26*26*26*10+10;
vector <int> s[maxn];
int fact(char s[4]){
int item = 0;
for(int i = 0;i<3;i++){
item = item*26+(s[i]-'A');
}
item = item*10+(s[3] - '0');
return item;
}
int main()
{
int n,k;
cin>>n>>k; //n表示学生,k表示课程
for(int i = 0;i<k;i++){
int a,b;
cin>>a>>b; //a表示输入课程编号,b表示对应选该课程的学生
for(int j = 0;j<b;j++){
char name[5];
cin>>name;
int q = fact(name);
s[q].push_back(a);
}
}
for(int i = 0;i<n;i++){
char ss[5];
cin>>ss;
int item = fact(ss);
sort(s[item].begin(),s[item].end());
cout<<ss<<" "<<s[item].size();
for(int j = 0;j<s[item].size();j++){
cout<<" "<<s[item][j];
}
cout<<endl;
}
return 0;
}