zoukankan      html  css  js  c++  java
  • PAT 甲级 1095 Cars on Campus

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

    #include <iostream>
    #include <vector>
    #include <string>
    #include <algorithm>
    #include <map>
    #include <cmath>
    using namespace std;
    struct node
    {
        string id;
        int cost,t;
        vector<int> time,inout;
        bool operator < (const node& rhs) const
        {
            return cost>rhs.cost||(cost==rhs.cost&&id<rhs.id);
        }
    }car[10005];
    
    map<string,int> mp;
    
    bool cmp(int a,int b)
    {
    	return abs(a)<abs(b);
    }
    
    int main()
    {
        int n,K;
        cin>>n>>K;
        string ss,op;
        int h,m,s;
        int cnt=1;
        for(int i=0;i<n;i++)
        {
            cin>>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;i<cnt;i++)
        {
    		car[i].cost=0;
    		car[i].t=1;
    		sort(car[i].time.begin(),car[i].time.end(),cmp);
    		for(int j=1;j<car[i].time.size();j++)
    		if(car[i].time[j]>0&&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;i<K;i++)
        {
            scanf("%d:%d:%d",&h,&m,&s);
            times=h*60*60+m*60+s;
            int ans=0;
            for(int j=1;j<cnt;j++)
            {
            	while(car[j].t<car[j].inout.size()&&times>car[j].inout[car[j].t])
            	{
            		car[j].t+=2;
            	}
            	if(car[j].t<car[j].inout.size()&&times>=car[j].inout[car[j].t-1]&&times<car[j].inout[car[j].t])
            	{
            		ans++;
            	}
            }
            printf("%d
    ",ans);
        }
        
        for(int i=1;i<cnt;i++)
        if(car[i].cost==car[1].cost)
        cout<<car[i].id<<' ';
        else break;
        printf("%02d:%02d:%02d",car[1].cost/3600,(car[1].cost%3600)/60,car[1].cost%60);
        return 0;
    }
    
  • 相关阅读:
    Lightmaping
    Android内存回收机制
    基本光照模型简单实现
    Pass的通用指令开关
    使用Depth Texture
    使用替换shader渲染
    Windows下安装Oracle12C(一)
    SpringMVC文件上传基础
    Spring集成线程池
    《经久不衰的Spring框架:@ResponseBody 中文乱码》(转)
  • 原文地址:https://www.cnblogs.com/ambition-hhn/p/13055579.html
Copyright © 2011-2022 走看看