前景提要,这道题真的是太难了哈,我之前是把这道题交给我电子科大的同学来做的,但做了

一周左右,他还是没有做出来。找了很多同学 还是做不出来,我不知道是太难了北邮的同学不想帮我,还是他们真的不会  但我相信我们电科的同学肯定是绞尽脑汁想得很久,这里我十分感谢我的高中同学sjk同学 (电子科大)这里是他的主页 部分代码也参考了他的

我有点想要VIP收费的 但想想还是算了 要始终坚守开源精神(嘿嘿)--感动没有 感动了就点个赞

电子科大不知名程序员的博客_CSDN博客-icoding数据结构习题,数据结构详析领域博主

然后呢 我就是去乐扣看了看原题 和评论区的答案,但是评论区的解答 只有类部分的代码,并没有能够实现整个程序,缺少了类和主体代码的接口部分以及输出输入部分 这部分都是我自己写的。

但类部分的代码过于复杂是借鉴的,所以我的自己代码只有接口部分 main函数里面的部分。

最后的确是解决了 但是还是TLE超时状态 有一个测试用例不行,所以也只能这样了 我也尽力了。

然后呢 这道题 最难受的部分就是vector<vector<int>>弄成的二维数组接口 这个部分要去网上学习一下,首先是初始化这个vector构成的二维数组Vector 实现二维数组_不知道叫啥好一点的博客-CSDN博客_vector二维数组

然后要把它初始化好,才能作为接口  作为构造函数的实际参数 进行类的初始化。

15 设计电影租借系统

作者: Turbo时间限制: 1S章节: 课程设计

问题描述 :

你有一个电影租借公司和 n 个电影商店。你想要实现一个电影租借系统,它支持查询、预订和返还电影的操作。同时系统还能生成一份当前被借出电影的报告。

所有电影用二维整数数组 entries 表示,其中 entries[i] = [shopi, moviei, pricei] 表示商店 shopi 有一份电影 moviei 的拷贝,租借价格为 pricei 。每个商店有 至多一份 编号为 moviei 的电影拷贝。

系统需要支持以下操作:

Search:找到拥有指定电影且 未借出 的商店中 最便宜的 5 个 。商店需要按照 价格 升序排序,如果价格相同,则 shopi 较小 的商店排在前面。如果查询结果少于 5 个商店,则将它们全部返回。如果查询结果没有任何商店,则返回空列表。

Rent:从指定商店借出指定电影,题目保证指定电影在指定商店 未借出 。

Drop:在指定商店返还 之前已借出 的指定电影。

Report:返回 最便宜的 5 部已借出电影 (可能有重复的电影 ID),将结果用二维列表 res 返回,其中 res[j] = [shopj, moviej] 表示第 j 便宜的已借出电影是从商店 shopj 借出的电影 moviej 。res 中的电影需要按 价格 升序排序;如果价格相同,则 shopj 较小 的排在前面;如果仍然相同,则 moviej 较小 的排在前面。如果当前借出的电影小于 5 部,则将它们全部返回。如果当前没有借出电影,则返回一个空的列表。

请你实现 MovieRentingSystem 类:

MovieRentingSystem(int n, vector<vector<int>>& entries) 将 MovieRentingSystem 对象用 n 个商店和 entries 表示的电影列表初始化。

vector<int> search(int movie) 如上所述,返回 未借出 指定 movie 的商店列表。

void rent(int shop, int movie) 从指定商店 shop 借出指定电影 movie 。

void drop(int shop, int movie) 在指定商店 shop 返还之前借出的电影 movie 。

vector<vector<int>> report() 如上所述,返回最便宜的 5部已借出 电影列表。

注意:测试数据保证 rent 操作中指定商店拥有 未借出 的指定电影,且 drop 操作指定的商店 之前已借出 指定电影。

示例 1:

输入:

3 6

0 1 5

0 2 6

0 3 7

1 1 4

1 2 7

2 1 5

search 1

rent 0 1

rent 1 2

report

drop 1 2

search 2

输出:

1 0 2

0 1

1 2

0 1

解释:

MovieRentingSystem movieRentingSystem = new MovieRentingSystem(3, [[0, 1, 5], [0, 2, 6], [0, 3, 7], [1, 1, 4], [1, 2, 7], [2, 1, 5]]);

movieRentingSystem.search(1);  // 返回 [1, 0, 2] (在结果中输出一行),商店 1,0 和 2 有未借出的 ID 为 1 的电影。商店 1 最便宜,商店 0 和 2 价格相同,所以按商店编号排序。

movieRentingSystem.rent(0, 1); // 从商店 0 借出电影 1 。现在商店 0 未借出电影编号为 [2,3] 。

movieRentingSystem.rent(1, 2); // 从商店 1 借出电影 2 。现在商店 1 未借出的电影编号为 [1] 。

movieRentingSystem.report();   // 返回 [[0, 1], [1, 2]] (在结果中输出两行)。商店 0 借出的电影 1 最便宜,然后是商店 1 借出的电影 2 。

movieRentingSystem.drop(1, 2); // 在商店 1 返还电影 2 。现在商店 1 未借出的电影编号为 [1,2] 。

movieRentingSystem.search(2);  // 返回 [0, 1](在结果中输出一行) 。商店 0 和 1 有未借出的 ID 为 2 的电影。商店 0 最便宜,然后是商店 1 。

输入说明 :

输入若干行:

第一行两个整数n和m,n表示电影商店的个数,m表示用于初始化对象的entries数组的行数。

然后m行,每行输入三个整数shopi, moviei, pricei表示entries的每一行。

后面有若干行,每行输入为search、rent、drop或report其中之一:

如果指令为search类型,后面需要输入一个整数表示movie。

如果指令为rent类型,后面需要输入两个整数表示shop和movie。

如果指令为drop类型,后面需要输入两个整数表示shop和movie。

如果指令为report类型,后面不需要输入整数。

提示:

1 <= n <= 3 * 10^5

1 <= m <= 10^5

0 <= shopi < n

1 <= moviei, pricei <= 10^4

每个商店 至多 有一份电影 moviei 的拷贝。

search,rent,drop 和 report 的调用 总共 不超过 10^5 次。

输出说明 :

输出若干行:

每行为search或report指令的返回值。

search指令返回的数组,输出每个整数后跟一个空格。

report指令返回的二维数组,分多行输出,每个输出的整数后跟一个空格。

输入范例 :

3 5
1 1 3
1 2 4
1 3 5
2 1 5
2 2 8
search 1
search 2
rent 1 2
rent 1 3
report
drop 1 2
search 2

输出范例 :

1 2 
1 2 
1 2 
1 3 
1 2

下面附上我的代码 和原题乐扣的链接力扣https://leetcode.cn/problems/design-movie-rental-system/comments/

#include<iostream>
#include<map>
#include<set>
#include <unordered_map>
#include<vector>
#include<unordered_set>
using namespace std;class MovieRentingSystem {
public:unordered_map<int, unordered_map<int, int>>all;//所有的商店 电影 价格unordered_map<int, unordered_set<int>>use;//商店和他们借出去的电影map<int, map<int, set<int>>>rent_;//借出去  价格 商店 电影map<int, map<int, set<int>>> no_rent;//没借   价格 商店 电影map<int, map<int, set<int>>>search_;//电影  价格 没有借商店/*search 和report 一样需要维护一个未接触的 按照价格 商店 电影的排序顺序rent  unordered_map<商店,unordered_map<电影,价格>>drio 返还电影  但是我们电影的价格我们是不知道的 需要预先存一下report 已借出的最便宜电影 map<price,map<商店,电影>>*/MovieRentingSystem(int n, vector<vector<int>>& entries) {for (int i = 0; i < entries.size(); i++) {int shop = entries[i][0], movie = entries[i][1], price = entries[i][2];all[shop][movie] = price;no_rent[price][shop].insert(movie);search_[movie][price].insert(shop);}}vector<int> search(int movie) {//search_  指定电影  价格 没有借的商店map<int, set<int>>t = search_[movie];vector<int>ans;for (auto it = t.begin(); it != t.end(); it++) {for (int shop : it->second) {ans.push_back(shop);if (ans.size() >= 5)return ans;}}return ans;}void rent(int shop, int movie) {//届电影use[shop].insert(movie);int price = all[shop][movie];rent_[price][shop].insert(movie);//借出去了no_rent[price][shop].erase(movie);search_[movie][price].erase(shop);}void drop(int shop, int movie) {//use[shop].erase(movie);int price = all[shop][movie];rent_[price][shop].erase(movie);//还no_rent[price][shop].insert(movie);search_[movie][price].insert(shop);}vector<vector<int>> report() {vector<vector<int>>res;//商店电影for (auto it = rent_.begin(); it != rent_.end(); it++) {//借出去的电影for (auto next = it->second.begin(); next != it->second.end(); next++) {for (int movie : next->second) {if (res.size() >= 5)return res;res.push_back({ next->first,movie });}}}return res;}
};int main()
{int n = 0;int m = 0;cin >> n;cin >> m;vector<vector<int>> entries(m);for (int i = 0; i < entries.size(); i++){entries[i].resize(3);}for (int i = 0; i < entries.size(); i++){for (int u = 0; u < entries[0].size(); u++){int temp = 0;cin >> temp;entries[i][u] = temp;}}MovieRentingSystem movieRentingSystem(n, entries);string shit;for (; cin >> shit;){if (shit == "search"){int movie;cin >> movie;vector<int>temp = movieRentingSystem.search(movie);for (int i = 0; i < temp.size(); i++){cout << temp[i] << " ";}cout << endl;}else if (shit == "drop"){int shop=0; int movie = 0;cin >> shop >> movie;movieRentingSystem.drop(shop, movie);}else if (shit == "rent"){int shop = 0;int movie = 0;cin >> shop >> movie;movieRentingSystem.rent(shop, movie);}else if (shit == "report"){vector<vector<int>>temp;temp = movieRentingSystem.report();for (int i = 0; i < temp.size(); i++){for (int j = 0; j < temp[0].size(); j++)cout << temp[i][j] << " ";cout << endl;}}}return 0;
}

15 设计电影租借系统相关推荐

  1. LeetCode 1912. 设计电影租借系统(map+set)

    文章目录 1. 题目 2. 解题 1. 题目 你有一个电影租借公司和 n 个电影商店. 你想要实现一个电影租借系统,它支持查询.预订和返还电影的操作. 同时系统还能生成一份当前被借出电影的报告. 所有 ...

  2. 基于PHP电影购票系统的设计与实现

    随着科学技术的飞速发展,社会的方方面面.各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,电影购票系统当然也不能排除在外.电影购票系统的设计是以实际运用为开发背景,运用软件工程开发方 ...

  3. 电影点评系统论文java_毕业设计(论文)-基于web的电影点评系统分析与设计.docx...

    毕业设计(论文) 论文题目 基于web的电影点评系统分析与设计 thesis Topic Movie reviews system analysis and design based on web A ...

  4. java版DVD影碟片出租赁系统C/S模式 java电影购票系统课程设计

    系统采用c/s架构,当然,你可以服务端.客户端都在同一台电脑上运行: 也可以在同一局域网内服务端.客户端在其它不同电脑上运行: 如果你有云服务器,可将Service端代码部署至云服务器上,客户端在任何 ...

  5. 【毕业设计_课程设计】基于微信小程序的共享雨伞租借系统

    文章目录 0 项目说明 1 简介 2 功能模块 3 关于登录与注册 4 页面展示 5 页面目录 6 项目工程 0 项目说明 基于微信小程序的共享雨伞租借系统 提示:适合用于课程设计或毕业设计,工作量达 ...

  6. java毕业生设计安全生产监管系统计算机源码+系统+mysql+调试部署+lw

    java毕业生设计安全生产监管系统计算机源码+系统+mysql+调试部署+lw java毕业生设计安全生产监管系统计算机源码+系统+mysql+调试部署+lw 本源码技术栈: 项目架构:B/S架构 开 ...

  7. 计算机毕业设计Java高原特色农产品网站设计(源码+系统+mysql数据库+Lw文档)

    计算机毕业设计Java高原特色农产品网站设计(源码+系统+mysql数据库+Lw文档) 计算机毕业设计Java高原特色农产品网站设计(源码+系统+mysql数据库+Lw文档) 本源码技术栈: 项目架构 ...

  8. 计算机毕业设计Java电影售票系统(源码+系统+mysql数据库+lw文档)

    计算机毕业设计Java电影售票系统(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java电影售票系统(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目架构:B/S架构 开发语 ...

  9. 计算机毕业设计JavaWeb美食网站设计(源码+系统+mysql数据库+lw文档)

    计算机毕业设计JavaWeb美食网站设计(源码+系统+mysql数据库+lw文档) 计算机毕业设计JavaWeb美食网站设计(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目架构:B/S ...

最新文章

  1. 速腾雷达客户端软件使用说明
  2. Ctrl+E快捷键,一键批量解决Excel中90%的问题!
  3. m 文件 dll matlab 中调用_Java与MatLab混编
  4. 下载matlab安装包太慢_Matlab2017a软件安装包以及安装教程
  5. php用什么电脑,我要学php了买一台什么配置的电脑最好?
  6. 文件从一台服务器拷贝到另一台服务器
  7. 【Logstash】Logstash:把MySQL数据导入到Elasticsearch中
  8. SpringBoot 如何统计、监控 SQL运行情况?
  9. 网址收藏 2020.12.11
  10. OpenCV的Mat和Halcon的HObject类型互相转换
  11. Django 强大的ORM之增删改查
  12. 原工信部副部长杨学山:重基础,促创新,求实效,转观念
  13. 汉字转拼音 名字转拼音 多音字姓名
  14. luncence学习
  15. Canvas—绘画圆弧
  16. Python 多进程 multiprocessing.Pool类详解
  17. xmind设计测试用例以及与云效平台的交互
  18. 【uni-app学习】uni-app低功耗蓝牙采坑记录
  19. python怎么爬取电影海报_Python 爬取猫眼数据分析《无名之辈》为何能逆袭成黑马?...
  20. railgun报文层级

热门文章

  1. 随鼠标移动的十字线的快速画法
  2. u盘无法识别如何修复
  3. 常用的ERP系统有哪些?ERP系统有哪些版本?
  4. 离心式固液分离过滤器 旋液分离器
  5. 轻松实现SR论文中的局部放大
  6. win输入法的字母间距变得很大
  7. 一起走进系统集成,了解自动化计量软件
  8. 利用layer实现MVC页面数据互交提示弹框
  9. MetaSelector:基于用户级自适应模型选择的元学习推荐
  10. 【JY】橡胶系支座/摩擦系支座全面解析