1006 Sign In and Sign Out (25 分)
今天给大家分享的题目是PAT甲级的一道小题,阅读理解题,简单模拟即可
简单翻译:
每天第一个来的人需要开门,最后一个走的人需要关门,给你每个人来的时间和走的时间,判断一下谁需要开门,谁需要关门。
思路:
求出所有人中,来的最早的和走的最晚的,输出即可。简单模拟。没有什么坑
c++
#include"bits/stdc++.h"
#define all(x) x.begin(),x.end()
#define len(x) x.size()
#define INF (1e9)
#define vi vector<int>
#define ll long long
#define db double
#define vvi vector<vector<int>>
#define pb(x) push_back(x);
#define MAXN 100
using namespace std;
//如果s1代表的时间比s2代表的时间早或者相等,就返回fasle,反之返回true
bool f(string s1, string s2) {
int H1 = (s1[0] - '0') * 10 + s1[1] - '0';
int H2 = (s2[0] - '0') * 10 + s2[1] - '0';
int M1 = (s1[3] - '0') * 10 + s1[4] - '0';
int M2 = (s2[3] - '0') * 10 + s2[4] - '0';
int S1 = (s1[6] - '0') * 10 + s1[7] - '0';
int S2 = (s2[6] - '0') * 10 + s2[7] - '0';
if (H1 < H2) {
return false;
} else if (H1 == H2) {
if (M1 < M2) {
return false;
} else if (M1 == M2) {
if (S1 < S2) {
return false;
} else if (S1 == S2) {
return false;
} else {
return true;
}
} else {
return true;
}
} else {
return true;
}
}
int main() {
int n;
cin >> n;
string ans1, ans2;
vector<vector<string>> s(n, vector<string>(3));
string earestTime = "99:99:99", endestTime = "00:00:00";
for (int i = 0; i < n; i++) {
cin >> s[i][0] >> s[i][1] >> s[i][2];
if (f(earestTime, s[i][1])) {
earestTime = s[i][1];
ans1 = s[i][0];
}
if (f(s[i][2], endestTime)) {
endestTime = s[i][2];
ans2 = s[i][0];
}
}
cout << ans1 << " " << ans2;
return 0;
}