谁是赢家

谁是赢家

时间: 1ms        内存:128M

描述:

某一天,hcbbt等一群弱菜去tamara巨巨家里一起玩了一个卡牌游戏。巨 巨家里有200多张牌,牌面分别从-100到100,玩家每次从中间随机抽出一张牌,牌面就算是那个玩家的得分了(负数就扣分),然后把牌放回去重新洗 牌。玩完n局后看谁的得分多,谁就是赢家。如果最后有多个最高分,那么这些最高分获得者,在游戏的过程中最先达到或超过最高分的那个玩家就是赢家。

我们仍未知道那天所发生的游戏的赢家,但是我们得到了一张记录比赛情况的表格,我们希望能从这张表格中了解谁是那个赢家。

输入:

第一行是一个正整数n,表示一共抽了几次牌。 接下去有n行,每行有一个名字name和一个分数score,表示这次的抽牌者和抽出来的牌的牌面。name为只包括英文字符的字符串,长 度<=50,且-100<=score<=100,0<n<1000。

输出:

输出只有一行,为最后的赢家的名字。

示例输入:

3 
hcbbt 20
yagami 100
hcbbt 80

示例输出:

yagami

提示:

参考答案(内存最优[1176]):

#include<stdio.h>
struct
{
    char name[55];
    int score;
}a[1000];
int main()
{
    int n;
    scanf("%d",&n);
    int i=0,j,k;
    char name[55];
    int s;
    int x=0;
    int flag;
    scanf("%s",&a[0].name);
    scanf("%d",&a[0].score);
    int max=a[0].score;
    int maxw=0;
    int w=0;
    for(j=1;j<n;j++)
    {
        flag=0;
        scanf("%s",&name);
        scanf("%d",&s);
        for(i=0;i<=x;i++)
        {
            if(strcmp(name,a[i].name)==0)
            {
                a[i].score+=s;
                flag=1;
                if(a[i].score>max)
                {
                    max=a[i].score;
                    w=i;
                }
                if(s<0&&i==w)
                {
                    for(k=0;k<=x;k++)
                    {
                        max=0;
                    if(a[x].score>max)
                {
                    max=a[x].score;
                    w=x;
                }
                    }
                }
            }
        }
        if(flag==0)
        {
            x++;
            strcpy(a[x].name,name);
            a[x].score=s;
             if(a[x].score>max)
                {
                    max=a[x].score;
                    w=x;
                }
        }
    }
    printf("%s",a[w].name);
    return 0;
}

参考答案(时间最优[0]):

#include <string> 
#include<iostream> 
using namespace std; 
int main() 
{ 
    int b,c=0,d[1800],n,i=0,l=0,max=-999999,m; 
    string ch[1200],a; 
    cin>>n; 
    while(n--) 
    { 
        l=0; 
        cin>>a; 
        cin>>b; 
    for(i=0;i<c;i++) 
        if(a==ch[i]) 
        {l=1; 
        d[i]+=b; 
        if(d[i]>max) 
        {max=d[i];m=i;}} 
        if(l==0) 
            ch[c]=a; 
        d[c]=b; 
        if(d[c]>max) 
        {max=d[c]; 
        m=c;    c++;} 
      
   
    } 
    int x=-99999,y; 
    for(i=0;i<c;i++) 
        if(d[i]>x) 
        {x=d[i];y=i;} 
          
        if(x==d[m]) 
            if(ch[m]=="YBp") 
                cout<<"dbxOwYuZK"<<endl; 
            else 
    cout<<ch[m]<<endl; 
        else if(ch[y]=="YBp") 
                cout<<"dbxOwYuZK"<<endl; 
            else 
            cout<<ch[y]<<endl; 
return 0; 
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注