请你实现一个类 UndergroundSystem ,它支持以下 3 种方法:

  1. checkIn(int id, string stationName, int t)
  • 编号为 id 的乘客在 t 时刻进入地铁站 stationName 。
  • 一个乘客在同一时间只能在一个地铁站进入或者离开。
  1. checkOut(int id, string stationName, int t)
  • 编号为 id 的乘客在 t 时刻离开地铁站 stationName 。
  1. getAverageTime(string startStation, string endStation)
  • 返回从地铁站 startStation 到地铁站 endStation 的平均花费时间。

  • 平均时间计算的行程包括当前为止所有从 startStation 直接到达 endStation 的行程。

  • 调用 getAverageTime 时,询问的路线至少包含一趟行程。

    你可以假设所有对 checkIn 和 checkOut 的调用都是符合逻辑的。也就是说,如果一个顾客在 t1 时刻到某个地铁站,那么他离开的时间 t2 一定满足 t2 > t1 。所有的事件都按时间顺序给出。

示例:

输入:

["UndergroundSystem","checkIn","checkIn","checkIn","checkOut","checkOut","checkOut","getAverageTime","getAverageTime","checkIn","getAverageTime","checkOut","getAverageTime"]
[[],[45,"Leyton",3],[32,"Paradise",8],[27,"Leyton",10],[45,"Waterloo",15],[27,"Waterloo",20],[32,"Cambridge",22],["Paradise","Cambridge"],["Leyton","Waterloo"],[10,"Leyton",24],["Leyton","Waterloo"],[10,"Waterloo",38],["Leyton","Waterloo"]]

输出:

[null,null,null,null,null,null,null,14.0,11.0,null,11.0,null,12.0]

解释:

UndergroundSystem undergroundSystem = new UndergroundSystem();
undergroundSystem.checkIn(45, "Leyton", 3);
undergroundSystem.checkIn(32, "Paradise", 8);
undergroundSystem.checkIn(27, "Leyton", 10);
undergroundSystem.checkOut(45, "Waterloo", 15);
undergroundSystem.checkOut(27, "Waterloo", 20);
undergroundSystem.checkOut(32, "Cambridge", 22);
undergroundSystem.getAverageTime("Paradise", "Cambridge"); // 返回 14.0。从 "Paradise"(时刻 8)到 "Cambridge"(时刻 22)的行程只有一趟
undergroundSystem.getAverageTime("Leyton", "Waterloo"); // 返回 11.0。总共有 2 躺从 "Leyton" 到 "Waterloo" 的行程,编号为 id=45 的乘客出发于 time=3 到达于 time=15,编号为 id=27 的乘客于 time=10 出发于 time=20 到达。所以平均时间为 ( (15-3) + (20-10) ) / 2 = 11.0
undergroundSystem.checkIn(10, "Leyton", 24);
undergroundSystem.getAverageTime("Leyton", "Waterloo"); // 返回 11.0
undergroundSystem.checkOut(10, "Waterloo", 38);
undergroundSystem.getAverageTime("Leyton", "Waterloo"); // 返回 12.0

提示:

总共最多有 20000 次操作。

1 <= id, t <= 10^6

所有的字符串包含大写字母,小写字母和数字。

1 <= stationName.length <= 10

与标准答案误差在 10^-5 以内的结果都视为正确结果。

解法

通过维护两个unorder_map(对map优化时间)进行操作

class UndergroundSystem {
private:
unordered_map<int, pair<string, int>> passenger;//<乘客id, <上车站, 上车时间>>
unordered_map<string, pair<int, int>> time;//<"上车站,下车站", <总用时, 总人次>>
public:
UndergroundSystem() {
} void checkIn(int id, string stationName, int t) {
passenger[id] = make_pair(stationName, t);
} void checkOut(int id, string stationName, int t) {
string s = passenger[id].first + ',' + stationName;//连接起始站和终点站
int pass_time = t - passenger[id].second;//存储经过时间
if(time.find(s) == time.end()){//查询是否计数过,计数过就加起来,不然就make_pair
time[s] = make_pair( pass_time , 1 );
}else{
time[s].first += pass_time;
time[s].second += 1;
}
} double getAverageTime(string startStation, string endStation) {
string s = startStation + ',' + endStation;
return (double)time[s].first/time[s].second;
}
}; /**
* Your UndergroundSystem object will be instantiated and called as such:
* UndergroundSystem* obj = new UndergroundSystem();
* obj->checkIn(id,stationName,t);
* obj->checkOut(id,stationName,t);
* double param_3 = obj->getAverageTime(startStation,endStation);
*/

Ps:

比赛的时候被降智了

最新文章

  1. MapReduce剖析笔记之三:Job的Map/Reduce Task初始化
  2. .net项目在linux平台的CI流程(基于Jenkins+mono+jexus)
  3. linux GD库安装
  4. 【BZOJ-2229】最小割 最小割树(最大流+分治)
  5. mvc remote的验证
  6. discuz X2.5自己写代码,获取当前登录的用户信息
  7. Sql之表的连接总结
  8. BZOJ_1617_[Usaco2008_Mar]_River_Crossing_渡河问题_(动态规划)
  9. HDU 1520 Anniversary party [树形DP]
  10. sort命令总结
  11. Jquery利用ajax调用asp.net webservice的各种数据类型(总结篇)
  12. quick-cocos2d-x游戏开发【4】——加入文本
  13. Eclipse知识
  14. (二)部署solr7.1.0到tomcat
  15. Jenkins结合.net平台之Web项目编译
  16. nginx编译文件配置(原)
  17. input type = file 在部分安卓手机上无法调起摄像头和相册
  18. Abp之工作单元与事务
  19. python接口自动化测试十九:函数
  20. 使用python读取yaml文件

热门文章

  1. idea最下方视图中没有spring框解决方法
  2. django models中的class meta
  3. Hyperledger Fabric ChainCode开发
  4. Scrapy 入门教程
  5. 关于动态路由中路由之间的跳转(页面a跳转到页面b)
  6. turtle学习笔记续集
  7. 今天建了一个Python学习交流的QQ群,求喜欢python的一起来交流。
  8. USB设备描述符和请求命令
  9. Spring集成axis2
  10. python基于scrapy框架的反爬虫机制破解之User-Agent伪装