HDU 1234(开门人和关门人)

基础题,分别按照签到时间从小到大排序,签离时间从大到小排序即可。

由于本题输入数据量大且复杂,所以使用 scanf 输入。

#include <cstdio>
#include <algorithm>
using namespace std;
const int MAXM = 10000;

struct person //人员
{
	char number[20]; //证件号码
	int inTime; //签到时间(转换为总秒数)
	int outTime; //签离时间(转换为总秒数)
}p[MAXM];

//签到时间排序标准,从小到大
bool cmpIn(person p1, person p2)
{
	return p1.inTime < p2.inTime;
}

//签离时间排序标准 从大到小
bool cmpOut(person p1, person p2)
{
	return p1.outTime > p2.outTime;
}

int main()
{
	int N, M;
	int inH, inM, inS; //签到时,分,秒
	int outH, outM, outS; //签离时,分,秒
	scanf("%d", &N);
	while (N--)
	{
		scanf("%d", &M);
		for (int i = 0; i < M; i++)
		{
			scanf("%s %d:%d:%d %d:%d:%d", p[i].number, &inH, &inM, &inS, &outH, &outM, &outS);
			p[i].inTime = inH * 3600 + inM * 60 + inS; //签到时间总秒数
			p[i].outTime = outH * 3600 + outM * 60 + outS; //签离时间总秒数
		}
		sort(p, p + M, cmpIn); //签到时间排序
		printf("%s ", p[0].number);
		sort(p, p + M, cmpOut); //签离时间排序
		printf("%s\n", p[0].number);
	}
	return 0;
}

继续加油。

发布了152 篇原创文章 · 获赞 1 · 访问量 7611

猜你喜欢

转载自blog.csdn.net/Intelligence1028/article/details/104703679