谁是赢家
时间: 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;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。
