HDU5131(模拟)

来源:互联网 发布:淘宝上下架工具 编辑:程序博客网 时间:2024/06/05 10:07

题目大意:给出n个人的姓名,以及杀敌数量,按照杀敌数从高到低排序,数量相同的按照姓名字典序排列。再给出m个查询,输出对应人物的比他杀敌数多的人数+1,和他并列多的人数+1,如果无并列的,第二项不输出。

思路:数据量很小,直接模拟。

#include <cstdio>#include <algorithm>#include <cstring>#include <string>#include <iostream>#include <cmath>using namespace std;const int maxn = 222;struct node{    string name;    int kill;    int id;    int fuck;    bool operator < (const node &a)const    {        if(kill == a.kill)            return name < a.name;        return kill > a.kill;    }}p[maxn];int main(){    int n, m;    string str;    while(scanf("%d", &n) && n)    {        for(int i = 0; i < n; i++)        {            cin >> p[i].name >> p[i].kill;        }        sort(p, p+n);        for(int i = 0; i < n; i++)        {            cout << p[i].name << " " << p[i].kill << endl;            p[i].id = i+1;            if(i == 0)            {                p[i].fuck = 1;            }            else if(i != 0)            {                if(p[i].kill != p[i-1].kill)                {                    p[i].fuck = i+1;                }                else                {                    p[i].fuck = p[i-1].fuck;                }            }        }        scanf("%d", &m);        while(m--)        {            cin >> str;            int a, b;            for(int i = 0; i < n; i++)            {                if(str == p[i].name)                {                    a = p[i].id-(p[i].id-p[i].fuck);                    b = p[i].id-p[i].fuck+1;                    if(b == 1)                    {                        printf("%d\n", a);                    }                    else if(b != 1)                    {                        printf("%d %d\n", a, b);                    }                }            }        }    }    return 0;}


0 0
原创粉丝点击