/*
这道题用到了结构体排序
对于sort排序时需要三个参数(排序头,结尾,排序规则)[排序头,结尾)即左闭右开,
对于排序规则默认less()即升序,头文件带有greter()降序排列
在自定义规则时需要两个参数可以理解成两个比较对象
int comp(student&s1,student&s2)
{
if(s1.counts2.count)
{
if(s1.scores2.score)
return s1.name<s2.name;
return s1.score<s2.score;
}
else
return s1.count>s2.count;
}
还学到了c++中指定输出,需要头文件#include
使用方法在需要指定的前面使用stew(数字)指定长度,left或者right指定对齐方式
eg:
cout<<setw(10)<<left<<a[i].name<<’ ‘<<setw(2)<<right<<a[i].count<<’ '<<setw(4)<<right<<a[i].score<<endl;
这道题还简单的使用了结构体使具有关联的数据存放在一个结构体里面
这样就不需要使用几个数组存放
*/
#include<iostream>
#include<string>
#include<sstream>
#include<algorithm>
#include <iomanip>
using namespace std;
struct student
{
string name;
int count;
int score;
};
int comp(student&s1,student&s2)
{
if(s1.count==s2.count)
{
if(s1.score==s2.score)
return s1.name<s2.name;
return s1.score<s2.score;
}
else
return s1.count>s2.count;
}
int main()
{
int n,m,t,k;
student a[10005];
string s;
k=0;
cin>>n>>m;
while(cin>>a[k].name)
{
a[k].score=0;
a[k].count=0;
t=n;
while(t--)
{
cin>>s;
if(s[0]=='-'||s[0]=='0')
{
a[k].count+=0;
a[k].score+=0;
}
else
{
int flag=0,ms=0,ms1=0;
a[k].count+=1;
for(int i=0;i<s.size();i++)
{
if(s[i]>='0'&&s[i]<='9'&&flag==0)
{
ms1=ms1*10+(s[i]-'0');
}
if(s[i]=='(')
{
flag=1;
}
if(s[i]>='0'&&s[i]<='9'&&flag==1)
{
ms=ms*10+(s[i]-'0');
}
if(s[i]==')')
{
a[k].score+=ms*m;
}
}
a[k].score+=ms1;
}
}
k++;
}
sort(a,a+k,comp);
for(int i=0;i<k;i++)
cout<<setw(10)<<left<<a[i].name<<' '<<setw(2)<<right<<a[i].count<<' '<<setw(4)<<right<<a[i].score<<endl;
return 0;
}