zoukankan      html  css  js  c++  java
  • 牛客网练习赛28A

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

    链接:https://www.nowcoder.com/acm/contest/200/A
    来源:牛客网

    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 32768K,其他语言65536K
    64bit IO Format: %lld

    题目描述

    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

    题意很简单,这里就不多解释了
    思路:因为询问是一个月份,求的是在这个月份的第K大的人:
    因为求的是相同月份第k大的人, 首先我们要求得在这个月份里的所有人,这就可以用set 来存储了,分别存储月份和出生年月,首先找到第一个该月份的人,然后它的后面k个就是我们要的答案了
    刚开始以为可以用multimap来做,后来查阅资料才发现multimap对键值相同的数排序是根据插入顺序排的,但是我们需要的是按照大小来排序,所以是不行的
    看代码:
    #include<iostream>
    #include<string.h>
    #include<map>
    #include<cstdio>
    #include<cstring>
    #include<stdio.h>
    #include<cmath>
    #include<ctype.h>
    #include<math.h>
    #include<algorithm>
    #include<set>
    #include<queue>
    typedef long long ll;
    using namespace std;
    const ll mod=1e9;
    const int maxn=1000+50;
    const int maxm=1;
    const int maxx=1e4+10;
    const ll maxe=1000+10;
    #define INF 0x3f3f3f3f3f3f
    #define Lson l,mid,rt<<1
    #define Rson mid+1,r,rt<<1|1
    int main()
    {
        int n,m,k;
        string a,b,c;
        map<string,string>s;//一对一的关系,用map很合适
        set<pair<string,string> >s1;//用于存储月份和出生年月,因为set会从小到大自动排序,先比较first,再比较second
        set<pair<string,string> >::iterator it;
        cin>>n>>m;
        for(int i=0;i<n;i++)
        {
            cin>>a>>b;//输入名字和出生年月
            c=b.substr(4,4);//获取月份
            s[b]=a;//将出生年月为这一天的人和名字用map对应起来,一对一的关系
            s1.insert(make_pair(c,b));//把出生年月和月存在s1中
        }
        for(int i=0;i<m;i++)
        {
            cin>>k>>a;
            it=s1.begin();
            for(it;it!=s1.end();it++)
            {
                if(it->first==a)//遍历找到月份为a的人
                {
                    for(int j=1;j<k;j++)//找到第K个
                        it++;
                    cout<<s[it->second]<<endl;//直接输出就可以了
                    break;
                }
            }
    
        }
        return 0;
    }
    当初的梦想实现了吗,事到如今只好放弃吗~
  • 相关阅读:
    opencv MAT数据操作
    浅谈模式识别中的特征提取
    设置Mysql的连接超时参数
    win7下怎样设置putty免用户名密码登陆
    正则表达式简明参考
    利用 canvas 破解 某拖动验证码
    wamp环境中mysql更改root密码
    Python读写文件
    Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
    如何改变placeholder的颜色
  • 原文地址:https://www.cnblogs.com/caijiaming/p/9782323.html
Copyright © 2011-2022 走看看