门禁系统(access)

为加强校园安全管理,南阳理工学院在校园大门处安装了一套门禁系统,同学们每次进出 校门都需要刷校园卡,门禁系统则会在数据库中留下刷卡记录。  

  由于门禁系统设计的缺陷,系统并没有记录每次刷卡是进入校园还是离开校园。请你利 用学校的学生信息和门禁系统的记录,求出每次刷卡是进入校园还是离开校园。假设初始时, 所有学生都在校园内部,且不存在漏刷卡的情况。 

 

 

输入描述:

第一行输入了两个整数 n, m (1 ≤ n ≤ 30000, 1 ≤ m ≤ 100000),表示学校中学生的人数和刷卡记录的条数。
接下来 n 行,每行包括两个字符串,分别表示一位同学的学号和姓名。学号由恰好 8 位0-9 的数字构成(可能有前导 0),姓名则由 1 至 10 个小写英文字母组成。
接下来 m 行,每行包括三个字符串,分别表示一条刷卡记录的日期、时间和学号。日期的格式为 YYYY-MM-DD,日期介于 2010 年 1 月 1 日和 2019 年 1 月 1 日之间,时间的格式为 HH:MM:SS (00 ≤ HH < 24, 00 ≤ MM, SS < 60)。数据保证输入的日期和时间合法保证刷卡记录中的学号在学生信息中出现过。
保证没有两个学生具有相同的学号(但可能有相同的姓名)。保证刷卡记录中没有日期和时间均相同的记录。

输出描述:

对于每一条刷卡记录,分别在一行内打印该刷卡记录的方向、日期、时间和学生姓名,之间用一个空格隔开。如果是离开校园,方向用字符 < 表示,如果是进入校园,方向用字符 >表示。
请将刷卡记录按照日期时间的先后顺序排序后输出。

样例输入:

复制

3 5
80000001 lhy
80000002 csy
80000004 wcy
2017-12-06 09:03:33 80000001
2018-06-17 21:49:33 80000002
2014-12-14 14:04:31 80000004
2018-07-04 11:19:42 80000001
2011-12-23 16:11:06 80000002

样例输出:

< 2011-12-23 16:11:06 csy
< 2014-12-14 14:04:31 wcy
< 2017-12-06 09:03:33 lhy
> 2018-06-17 21:49:33 csy
> 2018-07-04 11:19:42 lhy

思路:map映射和模拟

#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
struct node{
	string r;
	string s;
	int hao;
}p[100010];
map<int,string>mm;bool book[1000000000];
bool cmp(node a1,node b1)
{
	if(a1.r == b1.r)
	{
		return a1.s<b1.s;
	}
	return a1.r<b1.r;
}
int main()
{
	int n,m;string b;
	scanf("%d%d",&n,&m);int a;
	for(int i=0;i<n;++i)
	{
		scanf("%d",&a);
		cin>>b;
		mm[a]=b;
	}
	int nian,yue,ri,shi,fen,miao,hao1;
	for(int i=0;i<m;++i)
	{
		cin>>p[i].r;
		cin>>p[i].s;
		cin>>p[i].hao;
	}
	sort(p,p+m,cmp);
	for(int i=0;i<m;++i)
	{
		if(book[p[i].hao])
		{
			printf("> ");
		}
		else{
			printf("< ");
		}
		book[p[i].hao]=!book[p[i].hao];
		cout<<p[i].r<<" "<<p[i].s<<" "<<mm[p[i].hao]<<endl;	
		/*int a1 = p[i].day/10000;
		if(a1<10)
		{
			printf("0%d-",a1);
		}
		else{
			printf("%d-",a1);
		}
		int a2 = p[i].day/100-a1*100;
		if(a2<10)
		{
			printf("0%d-",a2);
		}
		else{
			printf("%d-",a2);
		}
		int a3 = p[i].day-a1*10000-a2*100;
		if(a3<10)
		{
			printf("0%d ",a3);
		}
		else{
			printf("%d ",a3);
		}	
		int a4 = p[i].time/3600;
		if(a4<10)
		{
			printf("0%d:",a4);
		}
		else{
			printf("%d:",a4);
		}
		int a5 = p[i].time/60-60*a4;
		if(a5<10)
		{
			printf("0%d:",a5);
		}
		else{
			printf("%d:",a5);
		}
		int a6 = p[i].time-60*a5-3600*a4;
		if(a6<10)
		{
			printf("0%d ",a6);
		}
		else{
			printf("%d ",a6);
		}
		cout<<mm[p[i].hao]<<endl;*/
	}
	return 0;
 } 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-lyslyslys

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值