description |
<tt>
在韩小侠的影响下郑大神跟余大神喜欢上了足球这项运动并疯狂迷恋足球明星,比如皮尔洛,C罗,梅西。。他们俩看了整整一个赛季,但是他们迷恋的球星表现有时能给他们惊喜但有时又让他们失望,如果一个球星让惊喜那么他们对这个球星会增加一些好感度,反之就会减少一些好感度,真是又爱又恨啊,到了赛季末,他们想买一张好感度最高的球员的海报。但是他们只有球星的名单和每场比赛对球员好感度的改变记录,现在请你帮忙统计,按球员好感度由大到小的顺序输出且每人初始好感度为0。如果好感度相同按照名字字典序从小到大顺序输出。</tt> |
input |
<tt>
测试数组有多组,每行输入一个整数n,m(1<=n,m<=50000),表示有n个球员,m为他们好感度改变的次数,接下来的球员名单有n行每行输入一个球星的名字c,(c长度不超过10),接下来的m行包含字符串c,x(-10000000<x<10000000),空格间隔,x的正负为对某个球员好感度的增减。</tt> |
output |
<tt>
对于每次输入,输出按好感值由大到小输出对应球员的名单和好感值。</tt> |
sample_input |
<tt>
3 6
Messi
Pirlo
Cr
Messi 15
Cr -10
Messi -5
Pirlo 20
Cr 5
Pirlo 10</tt> |
sample_output |
<tt>
Pirlo 30
Messi 10
Cr -5</tt> |
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct score
{
char name[30];
int num;
}a[50005];
bool cmp1(score a1,score a2)
{
return strcmp(a1.name,a2.name)<0;
//return false;
}
bool cmp2(score a1,score a2)
{
if(a1.num==a2.num) return strcmp(a1.name,a2.name)<0;
return a1.num>a2.num;
}
int main()
{
//freopen("cin.txt","r",stdin);
int n,m,d;
char q[30];
while(~scanf("%d%d",&m,&n))
{
for(int i=0;i<m;i++) {scanf("%s",a[i].name);a[i].num=0;}
sort(a,a+m,cmp1);
//for(int i=0;i<m;i++) printf("%s %d\n",a[i].name,a[i].num);
//cout<<endl;
for(int i=0;i<n;i++)
{
scanf("%s%d",q,&d);
int l=0,r=m-1,mid;
while(1)
{
mid=(l+r)/2;
if(strcmp(a[mid].name,q)==0) break;
else if(strcmp(a[mid].name,q)>0) r=mid-1;
else l=mid+1;
}
//printf("%s %d %s\n",a[mid].name,mid,q);
a[mid].num+=d;
}
//for(int i=0;i<m;i++) printf("%s %d\n",a[i].name,a[i].num);
sort(a,a+m,cmp2);
for(int i=0;i<m;i++)
printf("%s %d\n",a[i].name,a[i].num);
}
return 0;
}