本題不難,重點是找好存儲方式。
STL中vector聲明
1.vector< typename> name;//一維變長數組
typename可以是任何基本類型,int,double,char,結構體等
若想要初始化 eg.vector< typename> num(10);//圓括號
2.vector< typename>Arrayname[arraySize];
//vector數組,二維數組(一維固定,另一維變長)
#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
char name[40001][5];//學生個數得滿足最大要求。末尾有‘\0‘
vector<int> course[2501];//相當於二維數組
bool cmp(int a,int b)
{
return strcmp(name[a],name[b])<0;
}
int main()
{
int n,k;//n個學生,k個課
cin>>n>>k;
int c,courseID;
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);
}
}
for(int i=1;i<=k;i++)
{
sort(course[i].begin(),course[i].end(),cmp);
printf("%d %d\n",i,course[i].size());
for(int j=0;j<course[i].size();j++)
{
printf("%s\n",name[course[i][j]]);
}
}
return 0;//PAT規定加return 0
}
總結:
1.聲明數組大小,要比規定範圍大1。例如5門課,數組應該申請爲6。因爲數組是從0開始的。
2.名字按照字典序排列,algorithm庫中的sort函數中的cmp重寫。