#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXTITL 10
struct input{
char car_num[MAXTITL];
char time[MAXTITL];
char status[MAXTITL];
int time_num;
};
struct car{
char car_num[MAXTITL];
int in_time;
int out_time;
int stay_time;
};
struct query{
char query_time[MAXTITL];
int i_query_time;
int car_num;
};
int main(int argc, char *argv[]) {
int i,j,record_num,query_num;
int car_items=0;
int count_num=0;//完整记录的个数
struct input items[10001];
struct car cars[10001];
struct input min;//用于排序
scanf("%d",&record_num);
scanf("%d",&query_num);
for (i=0;i<record_num;i++){
scanf("%s",&items[i].car_num);
scanf("%s",&items[i].time);
gets(items[i].status);
items[i].time_num=((items[i].time[0]-'0')*10+(items[i].time[1]-'0'))*3600+((items[i].time[3]-'0')*10+
(items[i].time[4]-'0'))*60+((items[i].time[6]-'0')*10+(items[i].time[7]-'0'));
}
// 对输入记录按时间由小到大排序
// int cmp(struct input a, struct input b){
// return a.time_num > b.time_num ?1:-1;
// }
// qsort(items,record_num,sizeof(items[0]),cmp);
for(i=0;i<record_num;i++){
min=items[i];
for(j=i+1;j<record_num;j++){
if(min.time_num>items[j].time_num){
items[i]=items[j];
items[j]=min;
min=items[i];
}
}
}
// 对完整记录进行转存 ,有进有出的称为完整记录
for(i=0;i<record_num;i++){
if(strcmp(items[i].status," out")==0){
for(j=i-1;j>=0;j--){
if(strcmp(items[j].car_num,items[i].car_num)==0&&strcmp(items[j].status," in")==0){
strcpy(cars[count_num].car_num,items[i].car_num);
cars[count_num].in_time=items[j].time_num;
cars[count_num].out_time=items[i].time_num;
cars[count_num].stay_time=cars[count_num].out_time-cars[count_num].in_time;
count_num++;
break;
}else if(strcmp(items[j].car_num,items[i].car_num)==0&&strcmp(items[j].status," out")==0){
break;
}
}
}
}
// 先将有效记录中 车牌号相同的记录停车时间相加,并删除多余的记录
for(i=0;i<count_num;i++){
for(j=i+1;j<count_num;j++){
if(strcmp(cars[j].car_num,cars[i].car_num)==0){
cars[i].stay_time=cars[i].stay_time+cars[j].stay_time;
}
}
}
// 找出停车时间最长的车 并存储在 max_car[5000]中
int max_time=cars[0].stay_time;
int max_time_num=1;
struct car max_car[5000];
for(i=0;i<count_num;i++){
if(cars[i].stay_time==max_time){
max_car[max_time_num-1]=cars[i];
max_time_num++;
}else if(cars[i].stay_time>max_time){
max_time=cars[i].stay_time;
max_time_num=1;
max_car[max_time_num-1]=cars[i];
}
}
// 对max_car结构中的条目按车牌号进行排序
struct car min_car_number;
for(i=0;i<max_time_num-1;i++){
min_car_number= max_car[i];
for(j=i+1;j<max_time_num-1;j++){
if(strcmp(min_car_number.car_num,max_car[j].car_num)>0){
max_car[i]=max_car[j];
max_car[j]=min_car_number;
min_car_number=max_car[j];
}
}
}
// 输入查询时间,并将其转换为整型
struct query query_times[query_num];
for(i=0;i<query_num;i++){
gets(query_times[i].query_time);
query_times[i].i_query_time=((query_times[i].query_time[0]-'0')*10+(query_times[i].query_time[1]-'0'))*3600+
((query_times[i].query_time[3]-'0')*10+(query_times[i].query_time[4]-'0'))*60+((query_times[i].query_time[6]-'0')*10+
(query_times[i].query_time[7]-'0'));
}
for(i=0;i<query_num;i++){
query_times[i].car_num=0;
for(j=0;j<count_num;j++){
if(cars[j].in_time<=query_times[i].i_query_time&&cars[j].out_time>query_times[i].i_query_time){
query_times[i].car_num++;
}
}
}
// 输出各个时间点的车辆数目
for(i=0;i<query_num;i++){
printf("%d\n",query_times[i].car_num);
}
// 输出停车时间最长的车辆以及停车时间
for(i=0;i<max_time_num-1;i++){
printf("%s ",max_car[i].car_num);
}
printf("%02d:%02d:%02d",max_time/3600,(max_time-(max_time/3600)*3600)/60,(max_time-(max_time/3600)*3600)%60);
}
PAT甲级1095
最新推荐文章于 2020-11-22 02:24:12 发布