排名 HDU - 1236
原题地址
题意:提上写很清楚
主要是反省自己的思维方式不够灵活
#include<bits/stdc++.h>
#include<iostream>
#include<set>
#define ll long long
using namespace std;
struct Node {
int M;
string s;
int add=0;
};
int cmp(Node a , Node b){
return a.add==b.add?a.s<b.s:a.add>b.add;}
int main(){
int n,m,g;
while(cin >>n&&n){
cin >>m>>g;
Node p[n+5];
int question[m+5]={0};
for(int i=1;i<=m;i++){
cin >>question[i];
}
for(int i=1;i<=n;i++){
cin>>p[i].s;
int solve;
cin >>solve;
for(int j=0;j<solve;j++){
scanf("%d",&p[i].M);
p[i].add+= question[p[i].M];
}
}
sort(p+1,p+1+n,cmp);
int num=0;//**这里是错的,要改为 num = n;** , 因为可能所有人的分数都过了及格线,此时num= 0就会一个都不输出。
for(int i=1;i<=n;i++)
if(p[i].add<g)
{
num=i-1;
break;
}
cout<<num<<endl;
for(int i=1;i<=num;i++){
cout<<p[i].s<<" "<<p[i].add<<endl;
}
}
return 0;
}