2022-01-24
一个什么也不会的人,跟着北理2020年冬训视频做题:2020 BIT冬训
A-排名
思路:按照题意模拟出过程,初步运用c++语言,主要解决点在于 每个学生为一个{string,int}的struct,sort函数排序的比较函数cmp自己定义为:
int cmp(students a, students b)
{
if (a.sum != b.sum)
return a.sum > b.sum;
else
return a.num.compare(b.num)<0;
}
其中string的比较函数使用,return的形式让我有所领悟。
题解:
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;
struct students {
string num;
int sum;
};
int cmp(students a, students b)
{
if (a.sum != b.sum)
return a.sum > b.sum;
else
return a.num.compare(b.num)<0;
}
int main(void)
{
students temp;
int tishu_ido,tihao_ido;
int timu[11];
int N, M, G;
while (cin >> N)//读入第一个数
{
vector<students>stu;
if (N == 0)
return 0;//判断是否结束
cin >> M >> G;
for (int i = 1;i <= M;i++)
cin >> timu[i];//读入当前组的各个题目分
for (int i = 0;i < N;i++)
{
temp.sum = 0;
cin >> temp.num;
cin >> tishu_ido;
for (int j = 0;j < tishu_ido;j++)
{
cin >> tihao_ido;
temp.sum += timu[tihao_ido];
}//获取单个学生总分
if (temp.sum >= G)
stu.push_back(temp);
}//得到单组学生的数据
sort(stu.begin(), stu.end(), cmp);//排序
cout << stu.size() << endl;
for (int i = 0;i < stu.size();i++)
cout <<stu[i].num << ' ' << stu[i].sum << endl;//输出
}
return 0;
}