cf2A Winner(implementation)

题意:

N个回合。

每个回合:name score【名为name的这个人得了score分(可负可正)】。

问最后谁的累积分数是最高的。设为M。如果有好几个都得了M,找出这几个人中哪个最早回合累积分数超过【大于等于】M。

最早回合累积分:每一个回合结束后每个人都有一个当前的累积分数。

思路:

这题竟被困了挺久,,,,,,,,,,

*回头进standing看看别人写的简短代码

代码:

stru n1{
    string name;
    int p;
}
vs[1005];

int n;
map<string,int> mp, mp2;
string NAME[1005];
int A[1005], B[1005];



int main(){

    cin>>n;

    int cn=0;
    int ans=0;
    int T=0;
    int id=-1;
    mp.clear();
    mp2.clear();
    mem(A,0);
    mem(B,0);


    rep(i,1,n){
        string name,p;
        cin>>vs[i].name>>vs[i].p;
        if(mp[vs[i].name]==0){
            mp[vs[i].name]=++cn;
            NAME[cn]=vs[i].name;
        }
        A[mp[vs[i].name]]+=vs[i].p;
    }

    rep(i,1,cn){
        ans=max(ans,A[i]);
    }
    rep(i,1,cn){
        if(A[i]==ans){
            ++T;
            id=i;
            mp2[NAME[i]]=1;
        }
    }

    if(T==1){
        cout<<NAME[id]<<endl;
    }
    else{
        rep(i,1,n){
            if(mp2[vs[i].name]==1){
                B[mp[vs[i].name]]+=vs[i].p;
                if(B[mp[vs[i].name]]>=ans){
                    cout<<vs[i].name<<endl;
                    ret 0;
                }
            }
        }
    }


    return 0;
}
原文地址:https://www.cnblogs.com/fish7/p/4330886.html