PAT 甲级 1095 Cars on Campus

停车场记录了车辆进出的时间,求某个时间点停车场内车辆的数量和停车时间最长的车辆id及时间。具体题目可见PAT 1095 Cars on Campus。做这道题的时候可把我恶心坏了,只给了300ms很容易超时,主要是用到了map映射,以及排序相关的知识,用一个结构体保存一辆车的各种信息,包括进出时间、id、停车总时间等。做这道题最好把所有时间化成秒来做,会容易一些,询问车辆数量的时间点是递增的,这个也要注意,最后就是停车时间最长的车辆可以有多个,输出根据车辆id排序。总的来说是一道大模拟题。

#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
struct node
{
    string id;
    int cost,t;
    vector time,inout;
    bool operator < (const node& rhs) const
    {
        return cost>rhs.cost||(cost==rhs.cost&&id mp;

bool cmp(int a,int b)
{
	return abs(a)>n>>K;
    string ss,op;
    int h,m,s;
    int cnt=1;
    for(int i=0;i>ss;
        scanf("%d:%d:%d",&h,&m,&s);
        cin>>op;
        if(!mp[ss]) 
		{
			mp[ss]=cnt++;
			car[mp[ss]].id=ss;
		}
		if(op=="in")
		car[mp[ss]].time.push_back(-(h*60*60+m*60+s));
		else
		car[mp[ss]].time.push_back(h*60*60+m*60+s);
        
    }
    for(int i=1;i0&&car[i].time[j-1]<=0)
		{
			car[i].cost+=car[i].time[j]+car[i].time[j-1];
			car[i].inout.push_back(-car[i].time[j-1]);
			car[i].inout.push_back(car[i].time[j]);
		}
    }
    sort(car+1,car+cnt);
    int times;
    for(int i=0;icar[j].inout[car[j].t])
        	{
        		car[j].t+=2;
        	}
        	if(car[j].t=car[j].inout[car[j].t-1]&×

你可能感兴趣的:(PAT 甲级 1095 Cars on Campus)