题解 | #开门人和关门人#

开门人和关门人

https://www.nowcoder.com/practice/a4b37b53a44d454ab0834e1517983215

#include <cstdlib>
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
#include <map>
#include "queue"
#include "cstring"

typedef pair<string,string> PII;  
priority_queue<PII,vector<PII>,greater<PII>> open;  //小根堆找最早签到
priority_queue<PII> close; // 大根堆 找 最晚签到的人
int n;
int main() {
    cin >> n;
    while(n--){
        string id,optime,cltime;
        cin >> id >> optime >> cltime;
        optime.erase(2,1);
        optime.erase(4,1);
        cltime.erase(2,1);
        cltime.erase(4,1);
        
        open.push(PII{optime,id});
        close.push(PII{cltime,id});
    }
    string ido=open.top().second;
    string clo=close.top().second;
    cout << ido <<' '<<clo <<endl ;


}
// 64 位输出请用 printf("%lld")

一开始 没好好看题 , 以为中间 没人 的时候 也要关门 想了半天

再一看 原来 是 每天第一个到开门 , 最后一个才关门 不用管 中间情况

那就直接用两个 堆存 开门时间和 关门时间就可以了 一个小根堆 一个大根堆

注 : 堆默认 排序 字符串 的字典序 排

所以时间 就按字符串存 就可以 ,其实 erase 这两句也不用写

全部评论

相关推荐

10-11 17:45
门头沟学院 Java
走吗:别怕 我以前也是这么认为 虽然一面就挂 但是颇有收获!
点赞 评论 收藏
分享
牛客101244697号:这个衣服和发型不去投偶像练习生?
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务