POJ 1581 A Contesting Decision

题目描述

在这里插入图片描述
此题可以利用结构体进行排序,较为简单
但其实不用结构体就可以

#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;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值