本文废除!!!
参考链接:HDU1234 开门人和关门人
问题链接:HDU1234 开门人和关门人。
问题简述:参见上述链接。
问题分析:之前所做的程序质量不高,所以重做该题的题解。上次使用了结构数组和排序,完全没有必要,一边读入数据,一边处理就可以解决问题。
程序说明:程序中时间转换为整数(秒单位),以便比较。
参见链接:HDU1234 开门人和关门人(旧版本)。
/* HDU1234 开门人和关门人 */
#include <stdio.h>
#include <string.h>
int main()
{
int n, m;
int h, mi, s;
char startname[20];
char endname[20];
int minstarttime;
int maxendtime;
char name[20];
int starttime;
int endtime;
// 读入总天数(测试组数)
scanf("%d", &n);
while(n--) {
// 读入记录数
scanf("%d", &m);
// 设置暂时的最小开门时间和最大关门时间
minstarttime = 24 * 3600;
maxendtime = 0;
// 读入各个记录,并且求最小开门时间和最大关门时间
for(int i=1; i<=m; i++) {
scanf("%s %d:%d:%d", name, &h, &mi, &s);
starttime = s + mi * 60 + h * 3600;
if(starttime < minstarttime) {
minstarttime = starttime;
strcpy(startname, name);
}
scanf("%d:%d:%d", &h, &mi, &s);
endtime = s + mi * 60 + h * 3600;
if(endtime > maxendtime) {
maxendtime = endtime;
strcpy(endname, name);
}
}
// 输出结果
printf("%s %s\n", startname, endname);
}
return 0;
}