每天的记录在第一行给出记录的条目数M (M > 0 ),下面是M行,每行的格式为 证件号码 签到时间 签离时间 其中时间按“小时:分钟:秒钟”(各占2位)给出,证件号码是长度不超过15的字符串。
对每一天的记录输出1行,即当天开门和关门人的证件号码,中间用1空格分隔。 注意:在裁判的标准测试输入中,所有记录保证完整,每个人的签到时间在签离时间之前,且没有多人同时签到或者签离的情况。
3 CS301111 15:30:28 17:00:10 SC3021234 08:00:00 11:25:25 CS301133 21:45:00 21:58:40
SC3021234 CS301133
#include<stdio.h>
char IDS[100][20];
int main()
{
int M;
while (scanf("%d", &M) != EOF)
{
int Max = 0;
int maxId = 0;
int Min = 0x7FFFFFFF;
int minId = 0;
for (int i = 0; i < M; i++)
{
scanf("%s", IDS[i]);
int h, m, s;
scanf("%d:%d:%d", &h, &m, &s);
int time = h * 3600 + m * 60 + s;
if (time < Min)
{
Min = time;
minId = i;
}
scanf("%d:%d:%d", &h, &m, &s);
time = h * 3600 + m * 60 + s;
if (time > Max)
{
Max = time;
maxId = i;
}
}
printf("%s %s\n", IDS[minId], IDS[maxId]);
}
return 0;
}
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
for (int i = 0; i < N; i++) {
int m = sc.nextInt();
String[] records = new String[m+1];
for (int j = 0; j < m+1; j++) {
records[j] = sc.nextLine();
}
String[] record ;
Date early,late;
DateFormat df = new SimpleDateFormat("HH:mm:ss");
String first=null,last=null ;
try {
early = df.parse("23:59:59");
late = df.parse("00:00:00");
for (int j = 1; j < m+1; j++) {
record = records[j].split(" ");
if(early.compareTo(df.parse(record[1]))>0){
early = df.parse(record[1]);
first = record[0];
}
if(late.compareTo(df.parse(record[2]))<0){
late = df.parse(record[2]);
last = record[0];
}
}
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(first+" "+last);
}
}
}
//思路:将数据分别放进两个优先队列中
//一个存升序,存最早进入的;一个降序,存最后离开的
#include <iostream>
#include <cstdio>
#include <queue>
#include <string>
using namespace std;
struct Enter{
string id;
string entertime;
Enter(string a,string b):id(a),entertime(b){}
bool operator> (Enter e) const{
return entertime>e.entertime;
}
};
struct Leave{
string id;
string leavetime;
Leave(string a,string b):id(a),leavetime(b){}
bool operator< (Leave e) const{
return leavetime<e.leavetime;
}
};
int main(){
int n;
while(scanf("%d",&n)!=EOF){
priority_queue<Enter,vector<Enter>,greater<Enter>>enter;//改为二叉小根堆
priority_queue<Leave>leave;
string number;
string time1;
string time2;
for(int i=0;i<n;i++){
cin>>number>>time1>>time2;
enter.push({number,time1});
leave.push({number,time2});
}
cout<<enter.top().id<<" "<<leave.top().id<<endl;
}
return 0;
} #include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
struct Student {
string ID;
string startDate;
string endDate;
};
bool compareByStartDate(Student &s1, Student &s2) {
return s1.startDate < s2.startDate;
}
bool compareByEndDate(Student &s1, Student &s2) {
return s1.endDate < s2.endDate;
}
int main() {
int M;
cin >> M;
int i = M;
vector<Student> vc;
while (i--) {
string id, startDate, endDate;
cin >> id >> startDate >> endDate;
Student s = {id, startDate, endDate};
vc.push_back(s);
}
sort(vc.begin(), vc.end(), compareByStartDate);
cout << vc[0].ID << " ";
sort(vc.begin(), vc.end(), compareByEndDate);
cout << vc[M - 1].ID;
return 0;
} #include <bits/stdc++.h>
using namespace std;
int main(){
int m;
cin >> m;
getchar();
map<string, string> M1;
map<string, string> M2;
while(m--){
string str;
getline(cin, str);
int pos1 = str.find(' ');
string name = str.substr(0, pos1);
M1[str.substr(pos1+1, 8)] = name;
M2[str.substr(pos1+10)] = name;
}
map<string, string>::iterator it1;
map<string, string>::iterator it2;
it1 = M1.begin();
it2 = M2.end();
cout << it1->second << " " << (--it2)->second << endl;
return 0;
}
#include <stdio.h>
#include <string.h>
int main() {
int n;
while(scanf("%d",&n)!=EOF) {
char id[16],former[16],latter[16];
int h1,m1,s1,h2,m2,s2,s,earliest=86400,latest=0;
for(int i=0; i<n; i++) {
scanf("%s%d:%d:%d%d:%d:%d",id,&h1,&m1,&s1,&h2,&m2,&s2);
s=h1*3600+m1*60+s1;
if(s<earliest) {
earliest=s;
strcpy(former,id);
}
s=h2*3600+m2*60+s2;
if(s>latest) {
latest=s;
strcpy(latter,id);
}
}
printf("%s %s\n",former,latter);
}
return 0;
} import java.util.Scanner;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
TreeMap<String, String> open = new TreeMap<>();
TreeMap<String, String> close = new TreeMap<>();
for (int i = 0; i < n; i++) {
String id = scanner.next();
open.put(scanner.next(),id);
close.put(scanner.next(),id);
}
System.out.println(open.firstEntry().getValue()+" "+close.lastEntry().getValue());
}
} #include <iostream>
using namespace std;
int main()
{
int n; while (cin >> n)
{
string open, close, id; int hs0, ms0, ss0, hs1, ms1, ss1, open_time = 24*3600, close_time = 0; char delimit0, delimit1, delimit2, delimit3;
while (n-- && cin>>id>>hs0>>delimit0>>ms0>>delimit1>>ss0>>hs1>>delimit2>>ms1>>delimit3>>ss1)
{
int arrive_time = hs0 * 3600 + ms0 * 60 + ss0, leave_time = hs1 * 3600 + ms1 * 60 + ss1;
if (open.empty() || arrive_time <= open_time) { open = id; open_time = arrive_time; }
if (close.empty() || leave_time >= close_time) { close = id; close_time = leave_time; }
}
cout << open << ' ' << close << endl;
}
return 0;
} #include
using namespace std;
struct stu{
string name,in,out;
}E[10005];
bool cmp(stu a, stu b){
return a.in < b.in;
}
bool cmp1(stu a, stu b){
return a.out > b.out;
}
int main(){
int n;
string name,h,m,s,hh,mm,ss;
while(cin>>n){
for(int i=0;i<n;i++){
cin>>E[i].name>>E[i].in>>E[i].out;
}
sort(E,E+n,cmp);
cout<<E[0].name<<" ";
sort(E,E+n,cmp1);
cout<<E[0].name<<endl;
}
return 0;
}
try:
while True:
num = int(input())
idNum = []
signIn = []
signOut = []
for i in range(num):
temp = input().split()
idNum.append(temp[0])
signIn.append(temp[1])
signOut.append(temp[2])
a = idNum[signIn.index(min(signIn))] #找出签到的最小值
b = idNum[signOut.index(max(signOut))] #找出签退的最大值
print("%s %s" % (a,b))
except Exception:
pass
#include<iostream>
#include<cstring>
using namespace std;
struct people
{
char number[16];//证件号
char time_start[10];//签到时间
char time_end[10];//离开时间
};
int main()
{
int n;
people peo[100];
char open_time[10], close_time[10];
cin >> n;
for (int i = 0; i < n; i++)//输入信息
cin >> peo[i].number >> peo[i].time_start >> peo[i].time_end;
strcpy(open_time, peo[0].time_start);
strcpy(close_time, peo[0].time_end);
for (int i = 1; i < n; i++)//寻找时间
{
if(strcmp(open_time,peo[i].time_start)>0)
strcpy(open_time, peo[i].time_start);
if(strcmp(close_time, peo[i].time_end)<0)
strcpy(close_time, peo[i].time_end);
}
for (int i = 0; i < n; i++)//输出开门
{
if (strcmp(open_time, peo[i].time_start) == 0)
cout << peo[i].number << " ";
}
for (int i = 0; i < n; i++)//输出关门
{
if (strcmp(close_time, peo[i].time_end) == 0)
cout << peo[i].number <<endl;
}
return 0;
}
我使用的是字符串的比较,即把形如07:30:20这种直接放进字符串中,再使用strcmp进行比较//这道题有个大坑啊,我一开始觉得既然签到和签退时间不一样,就把签到和签退时间都放在了一个MAP中,过了样例提交发现过了40%
//查看错误数据后发现竟然有人在那过夜了(他的签退时间可能会早过其他人的签到时间)导致不能按照一个MAP中关键字最小最大的来选开门和关门人,我也是醉了,
//必须要把签到时间和签退时间分成两个MAP,才能找出签到最早的和签退最晚的
#include<bits/stdc++.h>
using namespace std;
map<string,string>m1;//存放签到时间和签到人关系
map<string,string>m2;//存放签退时间和签到人关系
int main()
{
int m;
while(cin>>m)
{
while(m--)
{
string str,str1,str2;
cin>>str>>str1>>str2;
m1[str1]=str;
m2[str2]=str;
}
map<string,string>::iterator it;
it=m1.begin();
cout<<it->second<<" ";
it=m2.end();
it--;
cout<<it->second<<endl;
}
return 0;
} #include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct record
{
char id[20];
char reg[20];
char leave[20];
}record;
int cmp0(record *a,record *b)
{
return strcmp(a->reg,b->reg);
}
int cmp1(record *a,record *b)
{
return strcmp(b->leave,a->leave);
}
int main()
{
int n,i;
while(scanf("%d",&n)!=EOF)
{
record r[n];
for(i=0;i<n;i++)scanf("%s%s%s",r[i].id,r[i].reg,r[i].leave);
qsort(r,n,sizeof(record),cmp0);
printf("%s ",r[0].id);
qsort(r,n,sizeof(record),cmp1);
printf("%s\n",r[0].id);
}
} #include <iostream>
#include <map>
#include <string>
#include <algorithm>
using namespace std;
struct people{
string number;
string time1;
string time2;
};
int cmp1(people x,people y)
{
return x.time1<y.time1;
}
int cmp2(people x,people y)
{
return x.time2>y.time2;
}
int main()
{
struct people a[1000];
int m;
cin>>m;
for(int i=0;i<m;i++)
{
cin>>a[i].number>>a[i].time1>>a[i].time2;
}
sort(a,a+m,cmp1);
cout<<a[0].number<<" ";
sort(a,a+m,cmp2);
cout<<a[0].number<<endl;
return 0;
} #include<stdio.h>//直接字典字符顺序比较
struct jifang{
char name[20];//证件
char lai[20];//开
char zou[20];//关
}work[100];
int main()
{
int n,i,minindex,maxindex;char min[20],max[20];
scanf("%d",&n);
for(i=0;i<n;i++)//输入
scanf("%s%s%s",work[i].name,work[i].lai,work[i].zou);
strcpy(min,work[0].lai);strcpy(max,work[0].zou);//全部初始化成第一个人
minindex=0;maxindex=0;
for(i=0;i<n;i++)//比较
{
//开门人lai min
if(strcmp(work[i].lai,min)<0)
{
strcpy(min,work[i].lai);
minindex=i;
}
//关门人zou max
if(strcmp(work[i].zou,max)>0)
{
strcpy(max,work[i].zou);
maxindex=i;
}
}
printf("%s %s",work[minindex].name,work[maxindex].name);
} #include <cstdio>
#include <iostream>
#include <map>
using namespace std;
map<string, string> student;
// 寻找最早的、最晚的
int main() {
int n;
scanf("%d", &n);
getchar();// 吃掉回车
// 输入数据
for (int i = 0; i < n; i++) {
string str;
getline(cin, str);
int m = str.find(" ");
string num = str.substr(0, m);
student[num] = str.substr(m+1);// 学号为主键
}
string early = student.begin()->second;// 用于记录最早的时间
string last = student.begin()->second;// 用于记录最晚的时间
map<string, string>::iterator it;// 迭代器
for (it = student.begin(); it != student.end(); it++) {
int pos = it->second.find(" ");// 找到时间序列中的 “ ”,方便分割
// 分割为 开始时间 和 结束时间
string stime = it->second.substr(0, pos);
string etime = it->second.substr(pos+1);
// 比较时间大小
if (stime < early.substr(0, pos)) {
early = it->second;
}
if (etime > last.substr(pos+1)) {
last = it->second;
}
}
// 找到最早的
for (it = student.begin(); it != student.end(); it++) {
if (early == it->second) {
cout << it->first << " ";
}
}
// 找到最晚的
for (it = student.begin(); it != student.end(); it++) {
if (last == it->second) {
cout << it->first;
}
}
}
//3
//CS301111 15:30:28 17:00:10
//SC3021234 08:00:00 11:25:25
//CS301133 21:45:00 21:58:40 #include <iostream>
#include <cstdio>
#include <map>
using namespace std;
int main(){
int n;
while(scanf("%d",&n)!=-1){
map<string,string> in,out;
string name,t1,t2;
while(n--){
cin>>name>>t1>>t2;
in[t1]=name;
out[t2]=name;
}
cout<<in.begin()->second<<" "<<out.rbegin()->second;
}
return 0;
}