nefu606好感统计 裸的二分

description

在韩小侠的影响下郑大神跟余大神喜欢上了足球这项运动并疯狂迷恋足球明星,比如皮尔洛,C罗,梅西。。他们俩看了整整一个赛季,但是他们迷恋的球星表现有时能给他们惊喜但有时又让他们失望,如果一个球星让惊喜那么他们对这个球星会增加一些好感度,反之就会减少一些好感度,真是又爱又恨啊,到了赛季末,他们想买一张好感度最高的球员的海报。但是他们只有球星的名单和每场比赛对球员好感度的改变记录,现在请你帮忙统计,按球员好感度由大到小的顺序输出且每人初始好感度为0。如果好感度相同按照名字字典序从小到大顺序输出。

input

测试数组有多组,每行输入一个整数n,m(1<=n,m<=50000),表示有n个球员,m为他们好感度改变的次数,接下来的球员名单有n行每行输入一个球星的名字c,(c长度不超过10),接下来的m行包含字符串c,x(-10000000<x<10000000),空格间隔,x的正负为对某个球员好感度的增减。

output

对于每次输入,输出按好感值由大到小输出对应球员的名单和好感值。

sample_input

3 6
Messi
Pirlo
Cr
Messi 15
Cr -10
Messi -5
Pirlo 20
Cr 5
Pirlo 10

sample_output

Pirlo 30
Messi 10
Cr -5
#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;
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值