本文共 1588 字,大约阅读时间需要 5 分钟。
为了解决这个问题,我们需要找出在一天中第一位签到的同学和最后一位签退的同学,这两位同学分别负责开门和关门。我们可以通过将签到和签退时间转换为秒来比较时间,并找到最早的签到时间和最晚的签退时间对应的同学。
#include#include #include #include using namespace std;struct Person { string id; string signInTime; string signOutTime;};int main() { int M; cin >> M; vector people; for (int i = 0; i < M; ++i) { string id, signIn, signOut; cin >> id >> signIn >> signOut; people.push_back({id, signIn, signOut}); } int minSignIn = 1e9; int maxSignOut = 0; string minId, maxId; for (const auto& p : people) { int signIn = timeToSeconds(p.signIn); int signOut = timeToSeconds(p.signOut); if (signIn < minSignIn) { minSignIn = signIn; minId = p.id; } if (signOut > maxSignOut) { maxSignOut = signOut; maxId = p.id; } } cout << minId << ' ' << maxId << endl; return 0;}int timeToSeconds(const string& time) { int h = stoi(time.substr(0, 2)); int m = stoi(time.substr(3, 2)); int s = stoi(time.substr(6, 2)); return h * 3600 + m * 60 + s;}
cin 读取输入数据,解析出每个同学的 ID、签到时间和签退时间,并将这些信息存储在一个 Person 结构体中。timeToSeconds 函数将时间字符串转换为秒数,方便比较。这种方法确保了我们能够高效地找到正确的同学,并且代码结构清晰,易于理解和维护。
转载地址:http://bavfk.baihongyu.com/