[PAT解题报告] Sign In and Sign Out
给定每个人进出机房的时间记录,来得最早的人和走得最晚得人分别负责开门和锁门。输出来得最早得人和走得最晚得人得id。
这个题,首先注意id里面没有空白,所以可以使用scanf直接读入数据。
关于时间的处理:输入的时间是hh:mm:ss的,我们可以用scanf("%d:%d:%d")读出h,m,s再把它们统一为一个整数,统一的方法其实可以很多,例如我们可以把它们接成一个6位数:h * 10000 + m * 100 + s。但是我个人比较喜欢的是转换成秒数——或者说这是60进制的数,也就是转换成h * 3600 + m * 60 + s,这样就可以直接用int比较大小了。所以本质就是求第二列的最小值和第三列的最大值所在的行的id。三列分别对应id,来的时间和走的时间。
算法比较简单,直接O(n)循环就可以了。
#include <cstdio>
#include <string>
#include <cstring>
using namespace std;

char s1[22],s2[22],s[22];
int main() {
int x = 1000000000, y = -1, n;
  for (scanf("%d",&n);n;--n) {
    int a1,b1,c1,a2,b2,c2;
    scanf("%s%d:%d:%d%d:%d:%d",s,&a1,&b1,&c1,&a2,&b2,&c2);
    int t = (a1 * 60 + b1) * 60 + c1;
    if (t < x) {
      x = t;
      strcpy(s1, s);
    }
    t = (a2 * 60 + b2) * 60 + c2;
    if (t > y) {
      y = t;
      strcpy(s2, s);
    }
  }
  printf("%s %s\n",s1,s2);
  return 0;
}
原题链接: http://www.patest.cn/contests/pat-a-practise/1006

注意!此信息未认证,请谨慎判断信息的真实性!

全部评论
空

相关内容推荐

头像 头像
2022-12-10 18:47
门头沟学院_2023
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像 头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
2022-12-16 02:48
门头沟学院_2022
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
2022-12-22 16:33
重庆工商大学_2024
点赞 评论 收藏
转发
点赞 收藏 评论
分享

全站热榜

正在热议