hdu 5131(2014 广州—模拟)

来源:互联网 发布:淘宝累积消量是多久的 编辑:程序博客网 时间:2024/06/13 04:10

题意:给你n个人以及他们的杀人数。先按杀人数从大到小排名输出,然后是一些询问

一个人名,①输出杀人数比他大的人数和+1;②如果有人杀人数和他一样而且名字的字典序比他小,输出人数+1,没有则无视。


#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#include <cmath>#include <map>using namespace std;typedef long long ll;#define N 100017map<string,int> mp;int n;struct node{    string name;    int Rank;} pnode[205];bool cmp(node a,node b){    if(a.Rank != b.Rank)        return a.Rank > b.Rank;    else        return a.name < b.name;}void fin(string Name){    int cur = mp[Name];    int tt= pnode[cur].Rank;    int num1 = 1;    int num2 = 1;    for(int i = cur - 1; i >= 1; i--)    {        if(pnode[i].Rank >tt)            num1++;        if(pnode[i].Rank == tt)            num2++;    }    printf("%d",num1);    if(num2 != 1)        printf(" %d\n",num2);    else        printf("\n");}int main(){    int n;    while(scanf("%d",&n) && n)    {        mp.clear();        for(int i = 1; i <=n ; i++)        {             cin>>pnode[i].name>>pnode[i].Rank;        }        sort(pnode+1,pnode+n+1,cmp);        for(int i=1; i<=n; i++)        {             cout<<pnode[i].name<<" "<<pnode[i].Rank<<endl;            mp[pnode[i].name] = i;        }        string tname;        int k;        scanf("%d",&k);        for(int i = 1; i <= k; i++)        {            cin>>tname;            fin(tname);        }    }    return 0;}





0 0