终于明白这个看似简单的题目,为啥是四星了。。。
要注意好多好多细节。
我找了半天的bug,才发现,字符长度为20,至少要定义其长度26,要留一位存"/0"...
还有cmp和sort的使用,学算法课的时候经常用,确实要注意升序和降序,还有,最最最重要的是,要仔细阅读题目,不能分神,以后做题不能三心二意了。
嗯嗯,灵活运用函数还是很省事的啦
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
struct node{
char num[25];
int score;
}stu[1000];
int cmp(node a,node b){
if(a.score!=b.score)
return a.score>b.score;
else{
int t= strcmp(a.num,b.num);
return t<0;
}
}
int main()
{
int N;
while(cin>>N&&N!=0){
int M,G;
cin>>M>>G;
int grad[10];
for(int i=1;i<=M;i++)
cin>>grad[i];
for(int j=0;j<N;j++){
int m;
cin>>stu[j].num>>m;
stu[j].score=0;
for(int i=0;i<m;i++){
int c;
cin>>c;
stu[j].score+=grad[c];
}
}
sort(stu,stu+N,cmp);
int ac=0;
for(int i=0;i<N;i++)
if(stu[i].score>=G)
ac++;
cout<<ac<<endl;
for(int j=0;j<ac;j++)
cout<<stu[j].num<<' '<<stu[j].score<<endl;
}
return 0;
}