PAT菜鸡笔记1006 Sign In and Sign Out
思路:
本题我使用了vector存结构体信息,写两个cmp对进入时间和出去时间分别排序,再输出就行了
#include<iostream>
#include<algorithm>
#include<vector>
#include<string.h>
using namespace std;
struct Info
{
char ID[15];
int hour[2];
int minue[2];
int second[2];
};
vector<Info> table;
bool cmp_in(Info a, Info b)
{
if (a.hour[0] != b.hour[0])
return a.hour[0] < b.hour[0];
else
if (a.minue[0] != b.minue[0])
return a.minue[0] < b.minue[0];
else
if (a.second[0] != b.second[0])
return a.second[0] < b.second[0];
else
return strcmp(a.ID, b.ID) < 0;
}
bool cmp_out(Info a, Info b)
{
if (a.hour[1] != b.hour[1])
return a.hour[1] > b.hour[1];
else
if (a.minue[1] != b.minue[1])
return a.minue[1] > b.minue[1];
else
if (a.second[1] != b.second[1])
return a.second[1] > b.second[1];
else
return strcmp(a.ID, b.ID) < 0;
}
int main() {
int N;
Info a;
scanf("%d", &N);
for (int i = 0; i < N; i++)
{
scanf("%s", a.ID);
scanf("%d:%d:%d %d:%d:%d", &a.hour[0], &a.minue[0], &a.second[0], &a.hour[1], &a.minue[1], &a.second[1]);
table.push_back(a);
}
sort(table.begin(), table.end(), cmp_in);
cout << table[0].ID<<" ";
sort(table.begin(), table.end(), cmp_out);
cout << table[0].ID;
return 0;
}