错误代码:第1测试点没通过。
#include<cstdio>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
struct Student{
string Sname;
int Cnum;//学生选修课程的数量
vector<int> Cno;//课程号
};
int main(){
int N,K;
scanf("%d%d",&N,&K);
vector<Student> arr;
vector<string> SCname[2501];
for(int i=0;i<N;i++){
Student stu;
char Sna[30];
scanf("%s",Sna);
string s=Sna;
stu.Sname=s;
int num;
scanf("%d",&num);
stu.Cnum=num;
for(int idx=0;idx<stu.Cnum;idx++){
int no;
scanf("%d",&no);
stu.Cno.push_back(no);
SCname[no].push_back(stu.Sname);
}
arr.push_back(stu);
}
for(int i=1;i<=K;i++){
if(!SCname[i].empty()){
sort(SCname[i].begin(),SCname[i].end());
printf("%d %d\n",i,SCname[i].size());
for(int k=0;k<SCname[i].size();k++){
printf("%s\n",SCname[i][k].c_str());
}
}
}
getchar();
getchar();
return 0;
}
仔细检查发现,在输出时,多加了判断条件if(!SCname[i].empty()),导致没人选的课程没输出。
正确代码:
#include<cstdio>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
struct Student{
string Sname;
int Cnum;//学生选修课程的数量
vector<int> Cno;//课程号
};
bool Search(int no,int K){
int left=1,right=K;
int mid;
while(left<=right){
mid=(left+right)/2;
if(mid==no){
return true;
}
else if(mid>no){
right=mid-1;
}
else{
left=mid+1;
}
}
return false;
}
int main(){
int N,K;
scanf("%d%d",&N,&K);
vector<Student> arr;
vector<string> SCname[2501];
for(int i=0;i<N;i++){
Student stu;
char Sna[30];
scanf("%s",Sna);
string s=Sna;
stu.Sname=s;
int num;
scanf("%d",&num);
stu.Cnum=num;
for(int idx=0;idx<stu.Cnum;idx++){
int no;
scanf("%d",&no);
stu.Cno.push_back(no);
SCname[no].push_back(stu.Sname);
}
arr.push_back(stu);
}
for(int i=1;i<=K;i++){
sort(SCname[i].begin(),SCname[i].end());
printf("%d %d\n",i,SCname[i].size());
for(int k=0;k<SCname[i].size();k++){
printf("%s\n",SCname[i][k].c_str());
}
}
getchar();
getchar();
return 0;
}
简洁版:
#include<cstdio>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
bool cmp(string a,string b){
return a<b;
}
int main(){
vector<string> SCname[2501];
int N,K;
char Sna[10];
int num;
scanf("%d%d",&N,&K);
for(int i=0;i<N;i++){
scanf("%s%d",Sna,&num);
string str=Sna;
for(int idx=0;idx<num;idx++){
int no;
scanf("%d",&no);
SCname[no].push_back(str);
}
}
for(int i=1;i<=K;i++){
sort(SCname[i].begin(),SCname[i].end(),cmp);
printf("%d %d\n",i,SCname[i].size());
for(int k=0;k<SCname[i].size();k++){
printf("%s\n",SCname[i][k].c_str());
}
}
getchar();
getchar();
return 0;
}