题目链接:http://acm.zjut.edu.cn/ShowProblem.aspx?ShowID=1205
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <string>
#include <iomanip>
using namespace std;
struct student
{
string s;
double d;
};
bool myComp(const student &s1,const student &s2)
{
if(s1.d!=s2.d) return s1.d>s2.d;
if(s1.s!=s2.s) return s1.s<s2.s;
}
int main()
{
int n;//班级数量
int c;//课程数量
double xf;
vector<double>vxf;
int p;//班级人数
string name;//学生名称
double score;//成绩
student xs;//学生名称与总学分结构体
vector<student>vxs;
cin>>n;//n个班
for(int i=0;i<n;i++)//处理每一个班
{
cin>>c;
for(int j=0;j<c;j++)
{
cin>>xf;
vxf.push_back(xf);
}
cin>>p;
for(int k=0;k<p;k++)
{
cin>>name;//读入学生名称
xs.s=name;
xf=0.0;
for(int m=0;m<c;m++)
{
cin>>score;
if(score<60) continue;
xf+=(score-50)/10*vxf[m];
}
xs.d=xf/10;
vxs.push_back(xs);
}
//输出每一个班的情况
cout<<(i?"\n":"");
cout<<"class "<<i+1<<":"<<endl;
sort(vxs.begin(),vxs.end(),myComp);
for(vector<student>::iterator it=vxs.begin();it<vxs.end();it++)
{
cout<<fixed<<setprecision(2);
cout<<left<<setw(11);
cout<<(*it).s<<(*it).d<<endl;
}
vxf.clear();//清除向量
vxs.clear();//清除向量
}
return 0;
}