公交换乘C++

题目:


 

 

 


样例解释:

样例#1:
第一条记录,在第 3 分钟花费 10 元乘坐地铁。
第二条记录,在第 46 分钟乘坐公交车,可以使用第一条记录中乘坐地铁获得的优惠票,因此没有花费。
第三条记录,在第 50 分种花费 12 元乘坐地铁。
第四条记录,在第 96 分钟乘坐公交车,由于距离第三条记录中乘坐地铁已超过 45 分钟,所以优惠票已失效,花费 3 元乘坐公交车。
第五条记录,在第 110 分钟花费 5 元乘坐地铁。
第六条记录,在第 135 分钟乘坐公交车,由于此时手中只有第五条记录中乘坐地铁获得的优惠票有效,而本次公交车的票价为 6 元,高于第五条记录中地铁的票价 5 元,所以不能使用优惠票,花费 6 元乘坐公交车。
总共花费 36 元。
样例#2:
第一条记录,在第 1 分钟花费 5 元乘坐地铁。
第二条记录,在第 16 分钟花费 20 元乘坐地铁。
第三条记录,在第 23 分钟花费 7 元乘坐地铁。
第四条记录,在第 31 分钟乘坐公交车,此时只有第二条记录中乘坐的地铁票价高于本次公交车票价,所以使用第二条记录中乘坐地铁获得的优惠票。
第五条记录,在第 38 分钟乘坐公交车,此时第一条和第三条记录中乘坐地铁获得的优惠票都可以使用,使用获得最早的优惠票,即第一条记录中乘坐地铁获得的优惠票。
第六条记录,在第 68 分钟乘坐公交车,使用第三条记录中乘坐地铁获得的优惠票。
总共花费 32 元。
样例#3:
第一条记录,在第 1 分钟花费 5 元乘坐地铁。
第二条记录,在第 16 分钟花费 6 元乘坐地铁。
第三条记录,在第 23 分钟花费 10 元乘坐地铁。
第四条记录,在第 47 分钟乘坐公交车。此时由于距离第一条记录中乘坐地铁已超过 45 分钟,所以优惠票已失效;第二,三条记录中的优惠票有效,但本次公交票价为 7 元,高于第二条的优惠票,只有第三条记录中的优惠票可以使用,所以使用第三条记录的优惠票。
第五条记录,在第 50 分钟乘坐公交车,此时第二,三条记录的优惠票有效,但第三条记录的优惠票已经使用,第二条记录的优惠票高于本次公交票价,所以使用第二条记录的优惠票。
第六条记录,在第 55 分钟乘坐公交车,第一条记录的优惠票已失效,第二,三条记录的优惠票已使用,花费 10 元乘坐公交车。
总共花费 31 元。


 思路:

用一个数组来装所有的收集到的赠票。每当坐地铁的时候,就直接花钱,然后获得一张赠票,放到数组里面。每当坐公交的时候,看看数组里面有没有时间合适,价格小于现在公交票价的赠票,并且没用过的赠票,直接用时间最早的那一张就可以了。

每张赠票要存三个信息,因此用一个结构体来存。数据不超过105105,因此开一个105105长度的数组。

const int MAXN = 100005;
struct Ticket {//赠票的价格,最晚使用时间和是否需用过int price, time, used;
} q[MAXN];//赠票盒子

然而,出题人会这么善良么?NO,NO,NO,显然不会。我们想想极限情况什么样子,极限数据105105,假设开始的时候全坐地铁,坐了5∗1045∗104 次以后,我们的盒子里面有好多票啊。后面全坐公交,要坐5∗1045∗104 次,每次都在这个大盒子里面找合适的票,复杂度O(n2)O(n2),总计算量2.5∗1092.5∗109,我们在超时的边缘疯狂试探啊。

怎么优化呢?关键点在于题中说每次坐车开始时间都不重合,而且45分钟票就过期。所以理论上来讲,盒子里最多也就有45张没过期的票。大量的票都是已经过期了的,没必要从头扫一遍数组,在大量过期的票中浪费宝贵的青春。所以我们想到类似手写队列的方法,定义一个head变量和一个tail变量,分别表示目前还没过期的第一张票的位置,和下一张新的赠票在数组里要插入的位置,每次从head到小于tail循环即可。每次最多循环45次,总共105105次循环,肯定不会超时。

 其余细节看代码注释吧。不要复制粘贴哦,理解题目才是王道!!!


 

#include <iostream>
using namespace std;
const int MAXN = 100005;
struct Ticket {//赠票的价格,最晚使用时间和是否需用过int price, time, used;
} q[MAXN];//赠票盒子
int head, tail, n, cost;int main() {cin >> n;for (int i = 0; i < n; ++i) {int op, price, time;//输入每次坐车的种类,价格和发车时间cin >> op >> price >> time;if (op == 0) {//如果是坐地铁,直接把价格加到cost里面cost += price;//新一张赠票插入数组末尾,这张票的最晚使用时间是当前时间+45q[tail].time = time + 45;//赠票面额就是地铁票价q[tail++].price = price;} else {//先用一个循环把过期票扔掉while (head < tail && q[head].time < time) {head++;}bool found = false;//表示是否有合适的赠票,先假设没有for (int j = head; j < tail; ++j) {//循环所有剩余的票,这些一定都没过期,因为题目中时间是按顺序给我们的if (q[j].price >= price && q[j].used == 0) {//如果价格合适,并且没用过,标记找到了,这张票标记用过found = true;q[j].used = 1;break;}}//如果没找到合适的赠票,老老实实花钱买吧if (!found) cost += price;}}cout << cost << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1548412.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

OpenCV与AI深度学习 | 实战 | 使用OpenCV和Streamlit搭建虚拟化妆应用程序(附源码)

本文来源公众号“OpenCV与AI深度学习”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;实战 | 使用OpenCV和Streamlit搭建虚拟化妆应用程序&#xff08;附源码&#xff09; 现看看demo演示。 本文将介绍如何使用Streamlit和OpenCV…

【GUI设计】基于Matlab的图像去噪GUI系统(8),matlab实现

博主简介&#xff1a; 如需获取设计的完整源代码或者有matlab图像代码项目需求/合作&#xff0c;可联系主页个人简介提供的联系方式或者文末的二维码。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本次案例是基于Matlab的图像去噪GUI系统&am…

Android界面控件概述

节选自《Android应用开发项目式教程》&#xff0c;机械工业出版社&#xff0c;2024年7月出版 做最简单的安卓入门教程&#xff0c;手把手视频、代码、答疑全配齐 控件是Android界面的重要组成单元&#xff0c;Android应用主要通过控件与用户交互&#xff0c;Android提供了非常…

PPT 快捷键使用、技巧

前言&#xff1a; 本文操作是以office 2021为基础的&#xff0c;仅供参考&#xff1b;不同版本office 的 ppt 快捷键 以及对应功能会有差异&#xff0c;需要实践出真知。 shift 移动 水平/垂直 移动 &#xff1b; shift 放大/缩小 等比例放大 缩小 &#xff1b; 正圆 正…

AOP-代理实现

三种代理实现 1 JDK动态代理实现-基于接口代理 2 CGLIB动态代理实现-基于类代理 3 AspectJ 适配实现 为什么Proxy.newProxyInstance 会生成新的字节码&#xff1f; 创建代理类&#xff1a; Proxy.newProxyInstance 首先会检查缓存中是否有已存在的代理类字节码。 如果没有&…

Pencils Protocol 即将登录各大 CEX,依旧看好 $DAPP

近期&#xff0c;Scroll生态头部DeFi协议Pencils Protocol迎来了系列重磅市场进展。自9月18日开始&#xff0c;$DAPP通证分别在Tonkensoft、Bounce以及Coresky等平台陆续开启了IDO&#xff0c;并且在短期内售罄。同时在通证售卖完成后&#xff0c;DAPP 通证又在9月27日陆续登录…

​极狐阿尔法 S5安全至上,北汽极狐打造移动防护堡垒

在新能源汽车的广阔舞台上&#xff0c;北汽极狐以其卓越的品质和创新的技术&#xff0c;不断书写着辉煌篇章。其中&#xff0c;极狐阿尔法 S5更是以其强大的性能、豪华的配置和亲民的价格&#xff0c;成为了众多消费者关注的焦点。 北汽极狐的品质追求 北汽极狐一直以来都将品…

Mysql建表遇到重复的列名

调用接口拿到的数据rows&#xff0c;有很多行&#xff0c;每一行又有很多key-value pair&#xff0c;一开始代码是遍历第一行&#xff0c;每一对key-value&#xff0c;key作为建表时的列名&#xff0c;value的类型决定了该列在mysql中的类型 之后出现问题&#xff0c;表能建&am…

cve 漏洞排查流程

1、打开CVE连接 确认漏洞jar包以及版本信息 https://gitee.com/opengauss/security/issues/IASNOA?fromproject-issue 2、通过命令导出对应jar包的依赖树 并导出到目标结果文件中 mvn dependency:tree -Dincludes:gson > gson.result.txt 3、过滤test引用…

Python PyQt5 在frame中生成多个QLabel控件和彻底销毁QLabel控件

文章目录 步骤 1: 创建主窗口和布局步骤 2: 添加QLabel到QFrame步骤 3: 销毁QLabel示例代码 在PyQt5中&#xff0c;在QFrame或任何其他容器控件中生成多个QLabel控件并通过一个标志位或方法来彻底销毁这些QLabel控件是相对直接的操作。以下是一个简单的示例&#xff0c;展示了如…

【Midjourney中文版:AI绘画新纪元,赋能创意设计与开发】

在数字艺术与设计领域&#xff0c;创新与效率并重。Midjourney中文版&#xff0c;作为一款强大的AI绘画工具&#xff0c;正引领我们步入一个全新的创意时代。它不仅简化了复杂的绘画流程&#xff0c;更以智能算法为驱动力&#xff0c;为开发者、设计师及所有创意工作者带来了前…

如何在postman中传入文件参数

如何在postman中传入文件参数 打开Body中的form-data&#xff0c;将请求所需的参数写到Key中&#xff0c;点击右侧的按钮选择File&#xff0c;在Value列中即可上传本地文件。

并发编程---线程与进程

业务场景&#xff1a;小明去理发店理发。 小明去理发店理发&#xff0c;完成理发需要吹&#xff0c;剪&#xff0c;洗、理的过程。由这个场景我们引用进程和线程这两个 概念。 一.进程 1.什么是进程 进程是具有独立功能的程序关于某个数据集合上的一次运行活动&#xff0c;是…

js删除emoji表情问题

emoji标签占位两个 &#xff0c;直接删除后一位会出现乱码符&#xff1b; 判断是否是emoji function isEmoji(char) {let code char.charCodeAt(0);return code>55296&&code<57343 } // 使用方法&#xff0c;传入单字符 console.log(isEmoji(1)); // false con…

算法复杂度之时间复杂度

一 . 数据结构前言 1.1 数据结构 数据结构(Data structure) 是计算机存储&#xff0c;组织数据的方式&#xff0c;指互相之间存在一种或多种特定关系的数据元素的集合。没有一种单一的数据结构对所有用途都有用&#xff0c;所以要学习各式各样的数据结构&#xff0c;如&#…

pilz皮尔兹PSSuniversal分散控制平台 Dezentrale Steuerungsplattform 手测

pilz皮尔兹PSSuniversal分散控制平台 Dezentrale Steuerungsplattform 手测

【科研小小白】理解图片容量、像素、尺寸、分辨率各自含义、 像素、分辨率与实际尺寸之间的转换关系

理解图片容量、像素、尺寸、分辨率各自含义&#xff1a; 通过之前的学习&#xff0c;我们知道了图片有这4个参数&#xff0c;下面给大家总结一这下4个参数的具体含义。 1、容量&#xff08;占内存&#xff09;&#xff1a;是指图像文件的存贮空间&#xff0c;也就是文件的大小…

华为OD机试 - 获取最多食物 - 拓扑排序、动态规划(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

计算机毕业设计 基于Python的广东旅游数据分析系统的设计与实现 Python+Django+Vue Python爬虫 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…