PAT 1006 Sign In and Sign Out (25分)

题目链接:点击这里

题意:每天早上,第一个到机房签到的人开门,最后一个签到的人锁门。根据登记进出的记录,你应该可以找到当天开门和关门的人。

思路:将时间 hh:mm:ss 都转化为秒,在遍历 m 条进出记录的同时,分别记录最小时间对应的 id 号和最大时间对应的 id 号,输出答案即可。

AC代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>

using namespace std;

int main()
{
    
    
    int m;
    scanf("%d", &m);
    
    string id, first_id, last_id;
    int hh, mm, ss, first_in = 1e9, last_out = -1e9;
    
    for(int i = 0; i < m; i++)
    {
    
    
        cin >> id;
        
        scanf("%d:%d:%d", &hh, &mm, &ss);
        int t = hh * 3600 + mm * 60 + ss;
        if(t < first_in)
        {
    
    
            first_in = t;
            first_id = id;
        }
        
        scanf("%d:%d:%d", &hh, &mm, &ss);
        t = hh * 3600 + mm * 60 + ss;
        if(t > last_out)
        {
    
    
            last_out = t;
            last_id = id;
        }
    }
    
    cout << first_id << " " << last_id << endl;
    
    return 0;
}

微信公众号《算法竞赛求职》,致力于详细讲解竞赛和求职所涉及到的算法原理和模板。欢迎关注,一起交流进步!

猜你喜欢

转载自blog.csdn.net/qq_42815188/article/details/108974124