两道日常练习题:洛谷P1165日志分析 + 洛谷P1553 数字反转(升级版)

两道题的代码我都会附着文字详解,并且会简洁说明一下思路:

先看第一套题目:

    题干:

输入输出: 

 

数据范围:

  这很明显是一道栈的问题,我们只需要根据题意模拟即可,需要注意的是当输入的N,也就是操作数较大的时候,我们需要考虑一个问题就是怎样去输出当操作类型为2,也就是输出当前库中最大的货物重量,我一开始是直接写了一个线性枚举的函数在栈中去查找,如下:

#include<iostream>
using namespace std;
const int N=2e5+100;
int a[N],n,top;
int fine(int x[],int l){int ans=-1<<20;for(int i=1;i<=l;i++)ans=max(ans,x[i]);return ans;
}
int main(){cin>>n;for(int i=1;i<=n;i++){int pd;cin>>pd;if(pd==0){int x;cin>>x;a[++top]=x;		}else if(pd==1){if(top!=0)--top;}else {if(top==0) cout<<"0"<<endl;else cout<<fine(a,top)<<endl;	}}return 0;
}

很明显当N很大的时候,使用枚举函数输出最大重量的货物会超时,这是一段66分的代码,所以我考虑一下优化并仔细阅读了一下题目,发现我们可以直接在n次操作的枚举的过程中去更新当前货物最重的值以及他对应的在栈中的位置,同时在源代码的基础上考虑当仓库为空的时候,不同操作应该怎么做,接下来看代码:

#include<iostream>
using namespace std;
const int N=2e5+100;//把N定义到最大数据范围以上
int a[N],n,top;//a数组存栈中元素,n代表了操作个数,top表示栈顶指针
int main(){cin>>n;int ans=0,t=-1;//这里的ans和t是当前栈中最重的货物以及对应a数组下标for(int i=1;i<=n;i++){int pd;cin>>pd;//操作类型if(pd==0){int x;cin>>x;a[++top]=x;if(x>ans){//更新ansans=x;t=top;}		}else if(pd==1){if(ans==a[top] && top>1){//如果删除的这个货物是原来栈中最重的货物并且删除了之后栈中仍存在货物ans=-1;for(int j=1;j<=top-1;j++){//在top的前面所有货物中找出最重的货物if(a[j]>ans){ans=a[j];t=j;}}}else if(ans==a[top] && top==1){//如果栈中已经只剩下一个货物并即将被删除ans=0;//将ans重新定义为0}if(top>0) --top; //当仓库非空时栈顶指针减去1}else {cout<<ans<<endl;//当操作选项为2的时候输出当前仓库的最重货物	}}return 0;
}

接下来看第二题:

输入输出以及数据范围;

 对所输入的数据的保证:

这道题目的思路并不复杂,主要就是存在太多的细节,直接上代码吧:

 

#include<string>
#include<iostream>
using namespace std;
int main(){string s;cin>>s;//用一个字符串来存储输入int l=s.size();//字符串的长度bool pd=false;//判断这个输入的字符串对应是否是整数int t;//如果是非整数,t就用来记录出现符号v对应的位置下标char v;//如果不是整数判断对应的别的数据类型并记录对应符号for(int i=0;i<l;i++)//这里判断输入的是否为整数{if(s[i]=='.' || s[i]=='%' || s[i]=='/'){v=s[i];pd=true;t=i;break;}}if(!pd && s[0]=='0'){//特判当输入为整数0的时候cout<<s[0];return 0;}if(!pd){//当输入一个非0的整数的时候int b=0;//当出现首个非0元素的时候更新b为1for(int i=l-1;i>=0;i--){if(s[i]!='0') b=1;//注意细节if(b==1)  cout<<s[i];}return 0;}else {//当输入不是整数char str[100];//用来记录t位置之前需要反转的数字for(int i=0;i<t;i++)str[i]=s[t-1-i];int p=0;	for(int i=0;i<t;i++){if(str[i]!='0') p=1;if(p==1) cout<<str[i];//同样要等出现首个非0元才能开始输出}//特判当符号前面数据为0的情况if(v=='/' && s[0]=='0') cout<<0; if(v=='%' && s[0]=='0') cout<<0;if(v=='.' && s[0]=='0') cout<<0; cout<<v;if(v=='%') return 0;//当为百分数的时候,输出已经结束了else {//否则根据是分数还是小数进行输出if(v=='/'){int n=0;for(int j=l-1;j>t;j--){if(s[j]!='0') n=1;	if(n==1) cout<<s[j];	}}else {bool ok=false;//用来判断小数的小数部分是否全部为0for(int j=l-1;j>t;j--)if(s[j]!='0') ok=true;if(!ok) cout<<0;//如果全部为0小数部分需要输出一个0else{//否则正常进行反转int q=t+1;while(s[q]=='0') ++q; 	for(int j=l-1;j>=q;j--){cout<<s[j];}}	}     }}return 0;		
}

代码较长不过思路不复杂并且非常详细易懂考虑进了所有的情况,希望读者能够耐心看完。

谢谢观看,希望对你有所帮助!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型学习笔记08——分布式训练

大模型学习笔记08——分布式训练 模型规模的扩大&#xff0c;对硬件&#xff08;算力、内存&#xff09;的发展提出要求。然而&#xff0c;因为内存墙的存在&#xff0c;单一设备的算力及容量&#xff0c;受限于物理定律&#xff0c;持续提高芯片的集成越来越困难&#xff0c;…

Vue.js:构建用户界面的渐进式框架

Vue.js是一种流行的JavaScript前端框架&#xff0c;用于构建用户界面。本文将介绍Vue.js的基本概念、特点、应用场景以及与其他框架的对比。 一、引言 在当今的前端开发领域&#xff0c;Vue.js已经成为了一个备受瞩目的框架。它的简洁、灵活和易于上手的特性使得开发人员能够…

动手做个无人机—材料篇

基于浙江大学Fast-Lab(高飞&#xff0c;潘能)和深蓝学院合作课程&#xff1a;第二课&#xff1a;动力套焊接_哔哩哔哩_bilibili 无人机材料1&#xff1a; 1、NUC 猛虎峡谷 准系统 i5薄款&#xff1a; 一款机载电脑&#xff0c;使用i5-1135G7 &#xff0c;最大内存64G&#xff…

八股文学习日常第一期(20240121)

零、前言 1、目的 帮助掌握面试题&#xff0c;就八股文相关内容展开进行学习和整理&#xff0c;也方便之后的复习和巩固。 2、八股文内容来源 ①https://blog.csdn.net/w20001118/article/details/125724647 一、具体内容分析 1、类的完整书写方式 1.1、类 [Access Mod…

7.【CPP】String类

一.汉字的编码 我们知道计算机存储英文字母&#xff0c;标点&#xff0c;数字用的是ascall码&#xff0c;128种用一个字节表示绰绰有余。而汉字远远不止128种&#xff0c;因此汉字需要两个字节表示。 1.gbk编码中汉字占两个字节。 2.utf-8中&#xff0c;一个汉字占三个字节。…

【博士每天一篇论文-技术综述】Machine Learning With Echo State Networks 一篇系统讲解ESN知识的五星文章

阅读时间&#xff1a;2023-11-21 1 介绍 年份&#xff1a;2020 作者&#xff1a;徐元超&#xff0c;曼尼托巴大学 期刊&#xff1a; 无 引用量&#xff1a;无 这篇文章是一篇技术报告&#xff0c;从递归神经网络&#xff08;RNNs&#xff09;引入到回声状态网络&#xff08;…

Qt 容器 Qlist

修改元素 1.修改链表指定位置元素 replace(5,66) 函数体指的是修改链表第五个元素&#xff0c;改为66 2.采用数组下标修改链表的元素&#xff1a; list[0] 100 ; 把链表数组下标为0的元素改为100 删除元素 1.list.removeFirst() 删除第一个元素 2.list.removeLast() 删除…

蓝桥杯:1.特殊日期(Java)

题目描述 对于一个日期&#xff0c;我们可以计算出年份的各个数位上的数字之和&#xff0c;也可以分别计算月和日的各位数字之和。 请问从1900年1月1日至9999年12月31日&#xff0c;总共有多少天&#xff0c;年份的数位数字之和等于月的数位数字之和加日的数位数字之和。 例如&…

《Python数据分析技术栈》第05章 06 矩阵(Matrices)

06 矩阵&#xff08;Matrices&#xff09; 《Python数据分析技术栈》第05章 06 矩阵&#xff08;Matrices&#xff09; A matrix is a two-dimensional data structure, while an array can consist of any number of dimensions. 矩阵是一种二维数据结构&#xff0c;而数组…

Linux tree命令教程:查看和导航目录结构(附案例详解和注意事项)

Linux tree命令介绍 tree是一个递归的目录列表程序&#xff0c;它可以生成一份文件和目录的深度缩进列表。无论何时你需要查看目录和子目录的结构&#xff0c;tree命令就是你需要的工具。tree命令还能够列出仅目录&#xff0c;隐藏文件&#xff0c;包括文件路径&#xff0c;根…

【Python】torch.no_grad()函数详解和示例

torch.no_grad() 是 PyTorch 中的一个上下文管理器&#xff0c;用于在进入该上下文时禁用梯度计算。这在你只关心评估模型&#xff0c;而不是训练模型时非常有用&#xff0c;因为它可以显著减少内存使用并加速计算。 当你在 torch.no_grad() 上下文管理器中执行张量操作时&…

Unity中实现捏脸系统

前言 目前市面上常见的捏脸一般是基于BlendShapes和控制骨骼点坐标两种方案实现的。后者能够控制的精细程度更高&#xff0c;同时使用BlendShapes来控制表情。 控制骨骼点坐标 比如找到控制鼻子的骨骼节点修改localScale缩放&#xff0c;调节鼻子大小。 BlendShapes控制表…

【数学笔记】集合及简要逻辑

集合 基础简要逻辑集合间的关系与运算 基础 集合定义&#xff1a;把一些能够确定的不同对象组成的整体叫做一个集合&#xff0c;每个对象叫做元素。集合记法&#xff1a;一般用大写字母 A , B , C . . . . . . A,B,C...... A,B,C......表示集合&#xff0c;小写字母 a , b ,…

分布式锁实现(mysql,以及redis)以及分布式的概念

道生一&#xff0c;一生二&#xff0c;二生三&#xff0c;三生万物 我旁边的一位老哥跟我说&#xff0c;你知道分布式是是用来干什么的嘛&#xff1f;一句话给我干懵了&#xff0c;我能隐含知道&#xff0c;大概是用来做分压处理的&#xff0c;并增加系统稳定性的。但是具体如…

特征融合篇 | YOLOv8 引入长颈特征融合网络 Giraffe FPN

在本报告中,我们介绍了一种名为DAMO-YOLO的快速而准确的目标检测方法,其性能优于现有的YOLO系列。DAMO-YOLO是在YOLO的基础上通过引入一些新技术而扩展的,这些技术包括神经架构搜索(NAS)、高效的重参数化广义FPN(RepGFPN)、带有AlignedOTA标签分配的轻量级头部以及蒸馏增…

android usb2.0 协议基础(1)

1-USB 基本知识 USB的重要关键概念: 1、 端点&#xff1a;位于USB设备或主机上的一个数据缓冲区&#xff0c;用来存放和发送USB的各种数据&#xff0c;每一个端点都有惟一的确定地址&#xff0c;有不同的传输特性&#xff08;如输入端点、输出端点、配置端点、批量传输端点) 2…

ORB-SLAM 论文阅读

论文链接 ORB-SLAM 0. Abstract 本文提出了 ORB-SLAM&#xff0c;一种基于特征的单目同步定位和建图 (SLAM) 系统该系统对严重的运动杂波具有鲁棒性&#xff0c;允许宽基线环路闭合和重新定位&#xff0c;并包括全自动初始化选择重建的点和关键帧的适者生存策略具有出色的鲁棒…

Android 基础技术——View 的宽高

笔者希望做一个系列&#xff0c;整理 Android 基础技术&#xff0c;本章是关于 View 的宽高 Activity Resume 的时候设置或者获取view的宽高是否有效? 回答&#xff1a;不确定。 首次 onResume 无效&#xff0c;二次 onResume 就有效了。 回顾「Android 基础技术——addView 流…

QT基础篇(13)QT5数据库

1.数据库基本概念 数据库&#xff08;Database&#xff09;是指存储、管理和组织数据的集合。它是一个组织化的、可持久化的数据集合&#xff0c;用于支持数据的存储、检索、更新和管理。 数据库系统&#xff08;Database System&#xff09;是建立在计算机上的数据管理系统&…

Eclipses安装教程

一、下载开发工具包 1、开发工具包JDK 下载地址链接&#xff1a;https://www.oracle.com/cn/java/technologies/downloads/ 下载教程&#xff1a; 1&#xff09;点击链接&#xff0c;可以跳转到页面 2&#xff09;下滑页面&#xff0c;找到开发工具包 3&#xff09; 记住下载之…