2024.04.10-春招第二场
01.LYA 的云服务计费系统
问题描述
LYA 是一家云服务提供商,她需要为客户提供云服务计费功能。现在,她有一份包含多条计费日志的文件,每条日志包含时间戳、客户标识、计费因子和计费时长四个字段。此外,她还有一份计费因子的单价列表。
LYA 需要编写一个程序,根据计费日志和计费因子单价列表,计算每个客户的话单总费用。需要注意的是,如果同一客户在相同时间戳上报了多条相同计费因子的日志,只能计费一次,并且选择先上报的日志进行计费。
输入格式
第一行包含一个正整数 n n n,表示计费日志的条数, 1 ≤ n ≤ 1000 1 \leq n \leq 1000 1≤n≤1000。
接下来的 n n n 行,每行包含四个字段,分别表示时间戳(长度为 10 10 10 的数字字符串)、客户标识(长度为 1 ∼ 16 1 \sim 16 1∼16 的字符串)、计费因子(长度为 1 ∼ 16 1 \sim 16 1∼16 的字符串)和计费时长(范围为 0 ∼ 100 0 \sim 100 0∼100 的整数),字段之间用逗号分隔。如果计费因子在单价列表中查不到,则认为其单价为 0 0 0;如果计费时长不在 0 ∼ 100 0 \sim 100 0∼100 的范围内,则认为计费时长为 0 0 0。
接下来一行包含一个正整数 m m m,表示计费因子的数量, 1 ≤ m ≤ 100 1 \leq m \leq 100 1≤m≤100。
最后的 m m m 行,每行包含两个字段,分别表示计费因子(长度为 1 ∼ 16 1 \sim 16 1∼16 的字符串)和单价(范围为 1 ∼ 100 1 \sim 100 1∼100 的整数),字段之间用逗号分隔。
输出格式
输出每个客户的话单总费用,每行包含两个字段,分别表示客户标识和话单费用,字段之间用逗号分隔。输出按照客户标识的字典序升序排列。
样例输入
5
1627845600,client1,factorA,10
1627845605,client2,factorB,15
1627845610,client1,factorA,5
1627845615,client1,factorB,8
1627845620,client2,factorB,20
2
factorA,5
factorB,7
样例输出
client1,131
client2,245
数据范围
- 1 ≤ n ≤ 1000 1 \leq n \leq 1000 1≤n≤1000
- 1 ≤ m ≤ 100 1 \leq m \leq 100 1≤m≤100
- 时间戳是长度为 10 10 10 的数字字符串
- 客户标识和计费因子是长度为 1 ∼ 16 1 \sim 16 1∼16 的字符串
- 计费时长的范围为 0 ∼ 100 0 \sim 100 0∼100
- 计费因子的单价范围为 1 ∼ 100 1 \sim 100 1∼100
【题目解析】
本题可以用DFS求解。基本思路如下:
- 枚举断开的节点 x x x,将其从 e x p o s e d exposed exposed 中移除。
- 对于 e x p o s e d exposed exposed 中的每个节点 u u u,从 u u u 开始DFS搜索所有可达的节点,并记录数量。权限等级初始为 10 10 10。
- 如果当前节点 u u u 可以访问节点 v v v(即 m a t r i x [ u ] [ v ] matrix[u][v] matrix[u][v] 不为 0 0 0 且不超过当前权限等级),则将 v v v 加入DFS,并将权限等级更新为 m a t r i x [ u ] [ v ] matrix[u][v] matrix[u][v]。
- 选择最终被入侵节点数量最少的 x x x 作为答案。如有多个,取编号最小的。