题解 | 排名
#include <bits/stdc++.h> using namespace std; struct stu{ string id; int score; }; bool cmp(stu a,stu b){ if(a.score!=b.score) return a.score>b.score; else return a.id<b.id; } int main() { int n, m , g; while (cin >> n >> m>>g) { // 注意 while 处理多个 case if(n==0) break; int ti[m+1]; for(int i=1;i<=m;i++) cin>>ti[i]; vector<stu> v; for(int i=1;i<=n;i++){ stu tmp; cin>>tmp.id; int n;cin>>n; int score = 0; while(n--){ int tmp; cin>>tmp; score += ti[tmp]; } tmp.score = score; v.push_back(tmp); } sort(v.begin(),v.end(),cmp); int cnt = 0; for(int i=0;i<v.size();i++) if(v[i].score>=g) cnt++; cout<<cnt<<endl; for(int i=0;i<v.size();i++) if(v[i].score>=g) cout<<v[i].id<<" "<<v[i].score<<endl; } } // 64 位输出请用 printf("%lld")
模拟 无需多言