马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
Powered by:NEFU AB-IN
Link
A1095 Cars on Campus (30)
题意
Zhejiang University has 8 campuses and a lot of gates. From each gate we can collect the in/out times and the plate numbers of the cars crossing the gate. Now with all the information available, you are supposed to tell, at any specific time point, the number of cars parking on campus, and at the end of the day find the cars that have parked for the longest time period.
思绪
给出每个人的车的收支情况,求一个时间内里有多少车,最长的累加停车时间是多少?
会有进出的噪音数据,取最晚进,最早出的时间,这就是一次的停车时间,然后利用差分,统计车的数目
此题也涉及到时间的转换,以及打印
代码
- # 3.8.19 import
- import random
- from collections import Counter, defaultdict, deque
- from datetime import datetime, timedelta
- from functools import lru_cache, reduce
- from heapq import heapify, heappop, heappush, nlargest, nsmallest
- from itertools import combinations, compress, permutations, starmap, tee
- from math import ceil, comb, fabs, floor, gcd, hypot, log, perm, sqrt
- from string import ascii_lowercase, ascii_uppercase
- from sys import exit, setrecursionlimit, stdin
- from typing import Any, Callable, Dict, List, Optional, Tuple, TypeVar, Union
- # Constants
- TYPE = TypeVar('TYPE')
- N = int(2e5 + 10)
- M = int(20)
- INF = int(1e12)
- OFFSET = int(100)
- MOD = int(1e9 + 7)
- # Set recursion limit
- setrecursionlimit(int(2e9))
- class Arr:
- array = staticmethod(lambda x=0, size=N: [x() if callable(x) else x for _ in range(size)])
- array2d = staticmethod(lambda x=0, rows=N, cols=M: [Arr.array(x, cols) for _ in range(rows)])
- graph = staticmethod(lambda size=N: [[] for _ in range(size)])
- class Math:
- max = staticmethod(lambda a, b: a if a > b else b)
- min = staticmethod(lambda a, b: a if a < b else b)
- class IO:
- input = staticmethod(lambda: stdin.readline().strip())
- read = staticmethod(lambda: map(int, IO.input().split()))
- read_list = staticmethod(lambda: list(IO.read()))
- read_mixed = staticmethod(lambda *types: [t(v) for t, v in zip(types, IO.input().split())])
- class Std:
- pass
- # ————————————————————— Division line ——————————————————————
- def convert_time(time: str) -> int:
- h, m, s = map(int, time.split(":"))
- return h * 3600 + m * 60 + s
- def convert_index(x: int) -> str:
- return f"{x // 3600:02}:{x % 3600 // 60:02}:{x % 60:02}"
- n, k = IO.read()
- diff_ = Arr.array(0, convert_time("24:00:01"))
- map_ = defaultdict(lambda: {
- "in": [],
- "out": []
- })
- for _ in range(n):
- string, time, status = IO.read_mixed(str, str, str)
- map_[string][status].append(time)
- max_ = Counter()
- max_val = 0
- for user, dict_ in map_.items():
- in_ = dict_["in"]
- out_ = dict_["out"]
- res = []
- res.extend([(convert_time(item), "in") for item in in_])
- res.extend([(convert_time(item), "out") for item in out_])
- res.sort(key=lambda x: x[0])
- pre_in, pre_out = -1, -1
- for index, st in res:
- if st == "in":
- pre_in = index
- if st == "out":
- pre_out = index
- if pre_in != -1 and pre_out != -1 and st == "out" and index > pre_in:
- diff_[pre_in] += 1
- diff_[index] -= 1
- val = index - pre_in
- max_[user] += val
- max_val = Math.max(max_val, max_[user])
- pre_in, pre_out = -1, -1
- for i in range(1, len(diff_)):
- diff_[i] += diff_[i - 1]
- for _ in range(k):
- time = IO.input()
- print(diff_[convert_time(time)])
- users_ = [user for user in max_.keys() if max_[user] == max_val]
- users_.sort()
- print(" ".join(users_), convert_index(max_val))
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |