题目描述
此题可以利用结构体进行排序,较为简单
但其实不用结构体就可以
#include<iostream>
#include<cstring>
using namespace std;
int main(){
string name;
int leasttime=0;
int mostnum=0;
int n;
int x,y;
int num,times;
string result;
cin>>n;
while(n--){
cin>>name;
num=0;times=0;
for(int i=0;i<4;i++){
cin>>x>>y;
if(y==0)
continue;
else{
num+=1;
times+=(x-1)*20+y;
}
}
if(num>mostnum)
{
result =name;
mostnum=num;
leasttime=times;
}
else if(num==mostnum){
if(times<leasttime)
{
result =name;
mostnum=num;
leasttime=times;
}
}
}
cout<<result<<" "<<mostnum<<" "<<leasttime<<endl;
}
网上的结构体解法
/*题目大意:找出n个队中解决问题数最多的队伍,如果解决的问题数相同,则找出所用时间最少的。输入的第一行表示有n支队伍,接下来n行都是队伍解决问题的数据,包括一个名字,第1题的提交次数,第一题的解决时间(若为0,表示该问题未能成功解决)接下来的分别是2,3,4题的数据。。。最后的时间计算规则是解决所用的时间加上每次提交但错误的次数*20。*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct team
{
char name[20];
int times1,time1;
int times2,time2;
int times3,time3;
int times4,time4;
int sum,ttime;
}a[150];
int cmp(team a,team b)
{
if(a.sum==b.sum)
return a.ttime <b.ttime;
return a.sum>b.sum;
}
int main()
{
int n;
scanf("%d",&n);
getchar();
for(int i=0;i<n;i++)
{
int cnt=0,tt=0;
scanf("%s%d%d%d%d%d%d%d%d",a[i].name,&a[i].times1,&a[i].time1,&a[i].times2,&a[i].time2,&a[i].times3,&a[i].time3,&a[i].times4,&a[i].time4);
if(a[i].time1!=0){
cnt++;
tt=tt+a[i].time1+(a[i].times1-1)*20;
}
if(a[i].time2!=0)
{
cnt++;
tt=tt+a[i].time2+(a[i].times2-1)*20;
}
if(a[i].time3!=0)
{
cnt++;
tt=tt+a[i].time3+(a[i].times3-1)*20;
}
if(a[i].time4!=0)
{
cnt++;
tt=tt+a[i].time4+(a[i].times4-1)*20;
}
a[i].sum=cnt;
a[i].ttime=tt;
}sort(a, a+n, cmp);
printf("%s %d %d\n",a[0].name,a[0].sum,a[0].ttime);
return 0;
}