考点:排序
一开始出现段错误的问题,是因为cmp函数不小心写错了,忘记return关键字
#include<bits/stdc++.h>
using namespace std;
const int MAXSIZE=101;
struct E {
string id;
int score;
E(string id,int score):id(id),score(score) {
}
};
int cmp(E a,E b);
int main() {
int n,m,k;
while(cin>>n) {
if(n==0) {
break;
}
cin>>m>>k;
vector<E> stu;
int t[20];
for(int i=1; i<=m; i++) {
cin>>t[i];
}
string id;
for(int i=0; i<n; i++) {
cin>>id;
int num,x,score=0;
cin>>num;
for(int i=0; i<num; i++) {
cin>>x;
score+=t[x];
}
stu.push_back(E(id,score));
}
sort(stu.begin(),stu.end(),cmp);
int p=-1;
for(int i=stu.size()-1;i>=0;i--){
if(stu[i].score>=k){
p=i;
break;
}
}
cout<<p+1<<endl;
for(int i=0; i<=p; i++) {
cout<<stu[i].id<<" "<<stu[i].score<<endl;
}
}
return 0;
}
int cmp(E a,E b) {
if(a.score!=b.score) {
return a.score>b.score;
} else {
return a.id<b.id;
}
}