SDUT 1563 实况球员综合能力大比拼(排序)

实况球员综合能力大比拼

Time Limit: 1000ms   Memory limit: 65535K  有疑问?点这里^_^

题目描述

大家都应该听说过实况足球吧,如果这个没听说过的话,大家应该听说过中国足球吧,无人不知无人不晓的神一样的队伍。

    其实我们今天要讨论的话题主要是实况足球这个游戏,模拟的是整个足球界的所有球队,当然对于开发者能够把中国足球加进去表示非常感激。


每支球队都有若干名球员,每个球员又有若干种能力,当然不同的球员的能力是不同的。我们关注的是球员的几项能力:速度,力量,技巧,视野,进攻,防守,团队配合能力。每种能力都有一个比重系数,当然对于不同的球队,各项能力所占的比重系数可能是不一样的,今天我们希望对那些著名球员们按综合能力进行一下排名,如果出现综合能力值相同的球员按照七项能力从前到后高的优先,如果仍旧有相同的则按名字的字典序从小到大排序。综合能力的计算方法是把各个能力按比重系数加权求和,所得结果即为该球员的综合能力值。

 

输入

    多组输入,相邻两组数据用空行隔开。每组输入的第一行为该球队球员各项能力所占的比重系数 ,7 个整数( [1,10] ),分别对应题目描述中的 7 项能力,用空格隔开。第二行是一个正整数 N ( 0 < N < 50 ),代表该球队要参与排名的球员总数,接下来 N 行,每行的有一个球员的名字,名字中间可能有空格,长度不超过 20 。再接下来 N 行,每行有一个跟上面 N 行中每行相对应的那名球员的各项能力的数据,每行 7 个用空格隔开的非负整数( [0,10] )。输入处理到文件结束为止。

输出

    每组数据对应一组输出,每组数据中按照输入顺序给出每个球员的综合能力和他在该组中的综合排名(从 1 开始),两者用空格隔开,每个球员的输出一行。每组数据最后输出一个空行。

示例输入

10 8 8 10 5 5 10
13
梅西
佩德罗
比利亚
哈维
伊涅斯塔
蒂亚戈
马斯切拉诺
阿尔维斯
阿比达尔
皮克
普约尔
阿德里亚诺
巴尔德斯
10 9 10 9 10 8 10
8 8 8 8 8 7 9
8 9 8 7 7 6 7
8 8 9 10 9 8 10
8 8 9 9 10 8 10
8 8 8 7 7 7 7
7 7 8 8 6 7 8
8 9 8 8 7 8 8
6 7 8 8 8 8 8
7 8 9 8 8 10 8
8 7 6 8 7 10 8
6 7 8 8 7 8 7
7 10 8 8 8 9 8
 
  
9 10 9 8 6 5 8
 
  
 
  
5
C.罗纳尔多
本泽马
迪马利亚
厄齐尔
阿隆索
9 10 10 8 10 8 8
9 9 9 8 9 8 8
9 8 9 9 9 8 9
9 8 9 9 8 8 8
8 9 8 10 9 8 8

示例输出

532 1
453 6
421 9
501 2
496 3
418 11
415 12
451 7
420 10
456 5
429 8
405 13
459 4

 
  
 
  
499 1
474 3
480 2
466 5
472 4


#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
struct node
{
    char name[25];
    int sum,y;
    int x[10];
} q[55];
int main()
{
    int a[10];
    while(~scanf("%d",&a[0]))
    {
        for(int i=1; i<7; i++)
            scanf("%d",&a[i]);
        int n;
        scanf("%d%*c",&n);
        for(int i=0; i<n; i++)
        {
            gets(q[i].name);
            q[i].sum=0;
        }
        for(int i=0; i<n; i++)
        {
            for(int j=0; j<7; j++)
            {
                scanf("%d",&q[i].x[j]);
                q[i].sum+=q[i].x[j]*a[j];
            }
        }
        for(int i=0; i<n; i++)
        {
            q[i].y=1;
            for(int j=0; j<n; j++)
            {
                if(i!=j)
                {
                    int m=0;
                    if(q[i].sum<q[j].sum)
                        q[i].y++;
                    else if(q[i].sum==q[j].sum)
                    {
                        for(int k=0; k<7; k++)
                        {
                            if(q[i].x[k] < q[j].x[k])
                            {
                                q[i].y++;
                                break;
                            }
                            else if(q[i].x[k] > q[j].x[k])
                            {
                                break;
                            }
                            else m++;
                        }
                    }
                    if(m==7 && strcmp(q[i].name,q[j].name)>0)
                        q[i].y++;
                }
            }
        }
        for(int i=0; i<n; i++)
            printf("%d %d\n",q[i].sum,q[i].y);
        printf("\n");
    }
    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值