[2021-TKK 暑期训练第一场] 1585:下馆子-3

 题目做了超链接

参考官方题解,作部分优化 


下馆子 -3

题意:

给定n组数据,由name,time构成

  1. 当只有一个最大值时,输出该同学
  2. 当不止有一个最大值时,输出最先大于等于max次的同学

题解:

  1. 考虑用map<string,int>

  2. 遍历 map 计算出最大值mm

  3. 若最大值为mm的只有一个,直接输出

  4. 若不止一个,重新模拟一次输入,当出现出勤次数大于等于max时输出该人名

上板子:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
pair<string, int>r[100005];
int main()
{
    map<string, int>p;//记录name以及time
    int n;
    cin >> n;
    string str;
    int mm = INT_MIN;//记录最终值中的最大值
    bool num = 1;//若只有一个最大值,num=1;不止一个,num=0
    for (int i = 0;i < n;i++)
    {
        string sq;int n;
        cin >> sq >> n;
        r[i] = { sq,n };//存储输入数据
        p[sq] += n;
    }
    for (auto i : p)//遍历容器p
    {
        if (i.second > mm)//最终值大于 mm
        {
            mm = i.second;
            str = i.first;//记录此时的name,令str=name
            num = 1;
        }
        else if (i.second == mm) num = 0;//不止一个最大值
    }
    if (num)cout << str;//若只有一个最大值
    else
    {
        p.clear();//清空容器p
        for (int i = 0;i < n;i++)//重新遍历一次输入的数据
        {
            string name = r[i].first;
            int time = r[i].second;
            p[name] += time;
            if (p[name] >= mm)
            {
                str = name;
                break;
            }
        }
        cout << str;
    }
    return 0;
}

 

 


这次线上赛被吊锤了,下次努力吧QAQ

制作:BDT20040

posted @ 2021-07-31 22:03  流白李  阅读(50)  评论(0编辑  收藏  举报