PAT A1006 Sign In and Sign Out

PAT A1006 Sign In and Sign Out

在这里插入图片描述

Sample Input:

3
CS301111 15:30:28 17:00:10
SC3021234 08:00:00 11:25:25
CS301133 21:45:00 21:58:40

Sample Output:

SC3021234 CS301133
#include <iostream>
using namespace std;

int main(){
	int n;
	cin >> n;
	string unlock, lock;
	cin >> unlock;
	lock = unlock;
	int h1, m1, s1, h2, m2, s2;
	scanf("%d:%d:%d %d:%d:%d", &h1, &m1, &s1, &h2, &m2, &s2);
    int min, max;
	min_in = h1 * 3600 + m1 * 60 + s1;
	max_out = h2 * 3600 + m2 * 60 + s2;
	for(int i = 1; i < n; ++i){
		string tmp;
		cin >> tmp;
		int H1, M1, S1, H2, M2, S2;
		scanf("%d:%d:%d %d:%d:%d", &H1, &M1, &S1, &H2, &M2, &S2);
		//注意! 
		int tmp_min, tmp_max;
		tmp_min = H1 * 3600 + M1 * 60 + S1;
		tmp_max = H2 * 3600 + M2 * 60 + S2;
		if(tmp_min < min_in){
			min_in = tmp_min;
			unlock = tmp;
		}
		if(tmp_max > max_out){
			max_out = tmp_max;
			lock = tmp;
		}
	} 

	cout << unlock << " " << lock;
	
	return 0; 
}
  • TIPS: 注意scanf()的格式,要在%d中间提前读入空格:

  • 简化:

    1. 将min设为INT_MAX(无穷大), max设为INT_MIN(无穷小) !!别搞反了!! ,包含在头文件climits
    2. 第一个人不用单独输入,可以放到循环里,通过两个if里的lock = tmp``unlock = tmp,就可以初始化了
  • code:

#include <iostream>
#include <climits>
using namespace std;

int main(){
	string unlock, lock;
	int n, max, min;
	scanf("%d", &n);
	max = INT_MIN;
	min = INT_MAX;
	for(int i = 0; i < n; ++i){
		string t;
		cin >> t;
		int h1, m1, s1, h2, m2, s2;
		scanf("%d:%d:%d %d:%d:%d", &h1, &m1, &s1, &h2, &m2, &s2);
		int tmpin = h1 * 3600 + m1 * 60 + s1;
		int tmpout = h2 * 3600 + m2 * 60 + s2;
		if(tmpin < min){
			min = tmpin;
			unlock = t;
		}
		if(tmpout > max){
			max = tmpout;
			lock = t;
		}
	}
	cout << unlock << " " << lock;
	
	return 0;
} 
  • T2 code:
#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3fffffff;
int main(){
	int m, Max = -1, Min = INF;
	string unlock, lock;
	scanf("%d", &m);
	for(int i = 0; i < m; ++i){
		string id;
		cin >> id;
		int in[3], out[3], in_time = 0, out_time = 0;
		scanf("%d:%d:%d %d:%d:%d", &in[0], &in[1], &in[2], &out[0], &out[1], &out[2]);
		for(int j = 0; j < 3; ++j){
//			in_time = in_time * 60 + in[i];	//Wrong1:睁大狗眼!
			in_time = in_time * 60 + in[j]; 
		}
		for(int j = 0; j < 3; ++j) out_time = out_time * 60 + out[j];
		if(in_time < Min){
			Min = in_time;
			unlock = id;
		}
		if(out_time > Max){
			Max = out_time;
			lock = id;
		}
	}
	cout << unlock << " " << lock;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值