牛客练习赛28 A- 生日宴(set)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sugarbliss/article/details/83149494

题目链接:https://www.nowcoder.com/acm/contest/200/A

题目描述 

Akoasm有一群朋友,但是由于Akoasm是人赢朋友太多,当他想知道某一天谁生日时,总是很头疼。于是,他请你来帮忙。

Akoasm会给出他所有朋友的名字与出生年月日,名字为10个字符以内的英文字母,出生年月日为8位数字如19990320。每一个询问包含月份与日期和一个整数k,输出生日在这天的年龄第k大的人。题目保证每一个朋友的出生年月日不同,且出生年月日均在19000101至19991231,保证一定有答案。

询问中生日为四位,如0320,1211

输入描述:

输入文件第一行包含1个正整数n,m,表示一共有n个朋友,一共有m次询问。

接下来n行,每行一个字符串加八位数字,中间用一个空格隔开,分别表示名字和出生年月日。

接下来m行,每行2个正整数k与s,表示求出生日在s的年龄第k大的人。

输出描述:

一共m行,每行一个字符串表示答案

示例1

输入

复制

3 2
Lee 19380220
Jane 19400220
Mary 19990321
2 0220
1 0321

输出

复制

Jane
Mary

备注:

对于100%的数据有n<=1000,m<=20

AC代码:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
set <pair<int, string>> sp[10005];
set <pair<int, string>>::iterator it;
string str;
int main()
{
    int n, m, x, k;
    cin >> n >> m;
    while(n--)
    {
        cin >> str >> x;
        sp[x%10000].insert(make_pair(x/10000,str));
    }
    while(m--)
    {
        cin >> k >> x;
        int cnt = 0;
        for(it = sp[x].begin(); --k; it++);
        cout << it->second <<endl;
    }
}

猜你喜欢

转载自blog.csdn.net/sugarbliss/article/details/83149494