zoukankan      html  css  js  c++  java
  • A1095 Cars on Campus [排序]

    在这里插入图片描述
    题目关键:给时间算出该时间在校内车辆
    最后一行写出停留时间最长的车子的名字和和停留时间
    关键点:map容器使用,根据第一个元素排序
    还有这个Note: the queries are given in ascending order of the times.
    查询时间从小到大我草,顺着查一次就行了,不然有三个会超时,坑点真的太多了
    ——————————————————————————————————————————————————

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<string>
    #include<map>
    #include<cstdio>
    const int maxn = 10010;
    using namespace std;
    struct car
    {
    	char id[15];
    	int time;
    	char status[4];
    }all[maxn], valid[maxn];
    int num = 0;
    map<string, int>_time;
    bool cmp1(car a, car b)
    {
    	if (strcmp(a.id, b.id))
    		return strcmp(a.id, b.id) < 0;
    	else
    		return a.time < b.time;
    }
    bool cmp2(car a, car b)
    {
    	return a.time < b.time;
    }
    int timetoint(int hh, int mm, int ss)
    {
    	return hh * 3600 + mm * 60 + ss;
    }
    int main()
    {
    	int n, k, hh, mm, ss;
    	scanf("%d%d", &n, &k);
    	for (int i = 0; i < n; i++)
    	{
    		scanf("%s %d:%d:%d %s", all[i].id, &hh, &mm, &ss, all[i].status);
    		all[i].time = timetoint(hh, mm, ss);
    	}
    	sort(all, all + n, cmp1);
    	int maxtime = -1;
    	for (int i = 0; i < n - 1; i++)
    	{
    		if (!strcmp(all[i].id, all[i + 1].id) && !strcmp(all[i].status, "in") && !strcmp(all[i + 1].status, "out"))
    		{
    			valid[num++] = all[i];
    			valid[num++] = all[i + 1];
    			int intime = all[i + 1].time - all[i].time;
    			if (_time.count(all[i].id) == 0)
    			{
    				_time[all[i].id] = 0;
    			}
    			_time[all[i].id] += intime;
    			maxtime = max(maxtime, _time[all[i].id]);
    		}
    	}
    	//开始对有效数组进行操作了
    	sort(valid, valid + num, cmp2);
    	int now=0,numcar = 0;
    	for (int i = 0; i < k; i++)
    	{
    		scanf("%d:%d:%d", &hh, &mm, &ss);
    		int time = timetoint(hh, mm, ss);
    		while (now < num && valid[now].time <= time)
    		{
    			if (!strcmp(valid[now].status, "in"))
    				numcar++;
    			else
    				numcar--;
    			now++;
    		}
    		printf("%d
    ",numcar);
    	}
    	map<string, int>::iterator it;
    	for (it = _time.begin(); it != _time.end(); it++)
    	{
    		if (it->second == maxtime) {
    			printf("%s ", it->first.c_str());
    		}
    	}
    	printf("%02d:%02d:%02d
    ", maxtime / 3600, maxtime % 3600 / 60, maxtime % 60);
    	return 0;
    }
    
  • 相关阅读:
    openwrt解压zstd包时报错"openwrt/dl/zstd-1.4.5.tar.zst: Permission denied tar: This does not look like a tar archive tar: Exiting with failure status due to previous errors"如何处理?
    pip如何使用代理?
    Markdown: 对Typora的一些小调整
    ray
    关于nginx中proxy_set_header的设置
    解决 curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused
    mysql 查询慢问题分析
    Elasticsearch导出数据存入本地文件
    mysql count 几种写法时间的比较
    python 线程池的实现
  • 原文地址:https://www.cnblogs.com/Hsiung123/p/13812077.html
Copyright © 2011-2022 走看看