Sign In and Sign Out (25分)
总结:
题目大意是:输入M个无序的进出记录,输出最早到达和最晚离开的学生id。
一定要认真读题和测试用例啊!
(我理解错误,看见who have unlocked and locked the door on that day就以为是按学生到达顺序记录,第一个到空教室的人开门,最后一个离开教室的学生关门。对教室到达前和离开后 是否有人做了判定,但其实题不是这意思,只是简单排序最早和最晚,OTZ。
写了代码2,也一并贴出,不知是否有没考虑全的情况。)
代码:
#include <iostream>
#include <cstring>
using namespace std;
int main(){
int m;
cin>>m;
string id, in, out;
string firstid, firstin="24:00:00";
string lastid, lastout="00:00:00";
for(int i=0; i<m; i++){
cin>>id>>in>>out;
if( in < firstin ){
firstid = id;
firstin = in;
}
if( out > lastout){
lastid =id;
lastout =out;
}
}
cout<<firstid<<" "<<lastid;
return 0;
}
代码2(错误代码):
#include <iostream>
#include <cstring>
using namespace std;
//错误 签到记录不按时间瞬间排列 而且只要第一个到的人开门 最后一个走的人关门
int main(){
int m;
cin>>m;
string id, in, out, nextid, nextin, nextout;//id in out存储当前最后离开的名字
int flag;
cin>>id>>in>>out;
cout<<id; //第一个人
flag = 0; //标记=0 开过门 已经有记录
for(int i=1; i<m; i++){
cin>>nextid>>nextin>>nextout;
//开门
if( nextin > out ){
if( flag ) cout<<" "<<id;
cout<<" "<<nextid;
out = nextout;
in = nextin;
id = nextid;
flag = 0;
}else if( nextout > out ){
out = nextout;
in = nextin;
id = nextid;
flag = 1;
}
}
if( flag ) cout<<" "<<id;
return 0;
}
/*自行设计的测试数据
3
SC3021234 08:00:00 11:25:25
CS301111 15:30:28 17:00:10
CS301133 21:45:00 21:58:40
1
CS301111 15:30:28 17:00:10
4
SC3021234 08:00:00 11:25:25
CS301111 09:30:28 12:00:10
CS301144 11:30:28 19:00:10
CS301133 15:30:28 16:00:10
*/