为加强校园安全管理,南阳理工学院在校园大门处安装了一套门禁系统,同学们每次进出 校门都需要刷校园卡,门禁系统则会在数据库中留下刷卡记录。
由于门禁系统设计的缺陷,系统并没有记录每次刷卡是进入校园还是离开校园。请你利 用学校的学生信息和门禁系统的记录,求出每次刷卡是进入校园还是离开校园。假设初始时, 所有学生都在校园内部,且不存在漏刷卡的情况。
输入描述:
第一行输入了两个整数 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;
}