#PAT#day8

入门篇(2)——算法初步(4.1排序)

1095 Cars on Campus

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

我的代码
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;

struct Record{
    char id[8],status[4];
    int time;

}record[10100];

struct Car{
    char id[8];
    int in,out,total=0,time_long;
}car_record[10100];

bool cmp1(Record a,Record b){
    if(strcmp(a.id,b.id)!=0) return strcmp(a.id,b.id)<0;
    else return a.time<b.time;
}

bool cmp2(Car a,Car b){
    if(a.total!=b.total) return a.total>b.total;
    else return strcmp(a.id,b.id)<0;
}

int main(){
    int n,k,car_record_num=0;// N (≤10 4), the number of records,
    //and K (≤8×10 4) the number of queries
    scanf("%d%d",&n,&k);
    int hh,mm,ss,temp_time;
    for(int i=0;i<n;i++){
        scanf("%s %d:%d:%d %s",record[i].id,&hh,&mm,&ss,record[i].status);
        temp_time=hh*3600+mm*60+ss;
        record[i].time=temp_time;
    }
    sort(record,record+n,cmp1);

    for(int i=0;i<n-1;i++){
        if(strcmp(record[i].status,"in")==0&&strcmp(record[i+1].status,"out")==0&&strcmp(record[i].id,record[i+1].id)==0){
            strcpy(car_record[car_record_num].id,record[i].id);
            car_record[car_record_num].in=record[i].time;
            car_record[car_record_num].out=record[i+1].time;
            car_record[car_record_num].time_long=record[i+1].time-record[i].time;
            i++;
            car_record_num++;
        }
    }
    for(int i=0,j=0;i<car_record_num;i++){
        if(strcmp(car_record[i].id,car_record[j].id)!=0){
            j=i;
        }
        car_record[j].total+=car_record[i].time_long;
    }
    for(int i=0;i<k;i++){
        int number=0;
        scanf("%d:%d:%d",&hh,&mm,&ss);
        temp_time=hh*3600+mm*60+ss;
        for(int j=0;j<car_record_num;j++){
            if(car_record[j].in<=temp_time&&car_record[j].out>temp_time){
                number++;
            }
        }
        printf("%d\n",number);
    }

    sort(car_record,car_record+car_record_num,cmp2);
    temp_time=car_record[0].total;
    for(int i=0;car_record[i].total==temp_time;i++){
        printf("%s ",car_record[i].id);
    }
    printf("%02d:%02d:%02d",temp_time/3600,temp_time%3600/60,temp_time%60);
}

notes
  1. 这道题一开始我理解错了题意,
    在这里插入图片描述
    这里是必须按时间顺序排列的下一个out记录才能和in记录匹配!
    并且一辆车可能有好多条有效的in/out记录!
    我之前以为一辆车只有一条有效的in/out记录。
    (文盲的悲哀!)

在这里插入图片描述
这里in时刻就已经是在校园里了,out时刻就已经是不在校园里了。

入门篇(2)——算法初步(4.2散列)

notes
  1. 位图法用的那种定位法是最基础、不加变化的散列函数,此外还有各种散列函数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值