[洛谷] 刷题栈 队列

目录

1.后缀表达式

2.表达式括号匹配 

3.表达式求值 

4.表达式的转换

5.机器翻译 


1.后缀表达式

后缀表达式 - 洛谷

#include<iostream>
#include<cstdio>
using namespace std;int stk[100]; // 用于存储操作数的栈
int index = 0; // 栈顶索引int main() {char op; // 当前读取的字符int now = 0; // 当前构建的数字bool readingNumber = false; // 是否正在读取一个数字while ((op = getchar()) != '@') { // 读取字符直到结束符 '@'if (op >= '0' && op <= '9') {// 构建当前数字now *= 10;now += op - '0';readingNumber = true;}else if (op == '.') {// 数字结束,压入栈中if (readingNumber) {stk[++index] = now;now = 0;readingNumber = false;}}else if (op == '+') {// 加法操作stk[index - 1] = stk[index - 1] + stk[index];index--;}else if (op == '-') {// 减法操作stk[index - 1] = stk[index - 1] - stk[index];index--;}else if (op == '*') {// 乘法操作stk[index - 1] = stk[index - 1] * stk[index];index--;}else if (op == '/') {// 除法操作,结果向零取整stk[index - 1] = stk[index - 1] / stk[index];index--;}}// 输出最终结果cout << stk[1] << endl;return 0;
}

2.表达式括号匹配 

表达式括号匹配 - 洛谷

#include<iostream>
#include<bits/stdc++.h>
using namespace std;int main()
{string s;cin >> s;int isMatch = 0;for (int i = 0; i < s.length(); i++) {if (s[i] == '(') {isMatch++;}else if (s[i] == ')') {isMatch--;if (isMatch < 0) {cout << "NO";return 0;}}}if (!isMatch) {cout << "YES";}else {cout << "NO";}return 0;}

3.表达式求值 

[NOIP2013 普及组] 表达式求值 - 洛谷

如果用Python

print(intput()%10000)

首先是思路:

  • 可以用一个栈储存运算符

  • 并用另一个栈储存需要运算的数字

#include <iostream>
#include <stack>
#include <string>using namespace std;stack<int> num; // 定义一个栈存储数字
stack<char> op; // 定义一个栈存储运算符
string input;
int sum = 0, ans, t, t1, t2; // t, t1, t2均为临时变量int applyOp(int a, int b, char oper) {if (oper == '*') return (a * b) % 10000;if (oper == '+') return (a + b) % 10000;return 0;
}int main() {cin >> input;for (int i = 0; i < input.length(); i++) {if (isdigit(input[i])) { // 字符转数字sum = sum * 10 + (input[i] - '0');if (i == input.length() - 1 || !isdigit(input[i + 1])) {sum = sum % 10000; // 取模,后四位num.push(sum);sum = 0;}}else if (input[i] == '+' || input[i] == '*') { // 运算符while (!op.empty() && (op.top() == '*' || (op.top() == '+' && input[i] == '+'))) {t1 = num.top(); num.pop();t2 = num.top(); num.pop();t = applyOp(t2, t1, op.top());op.pop();num.push(t);}op.push(input[i]);}}while (!op.empty()) {t1 = num.top(); num.pop();t2 = num.top(); num.pop();t = applyOp(t2, t1, op.top());op.pop();num.push(t);}ans = num.top(); // 可直接输出栈顶元素cout << ans << endl;return 0;
}

4.表达式的转换

表达式的转换 - 洛谷

#include <bits/stdc++.h>
using namespace std;
stack<char> dat, op;
stack<int> num, dat2;
int check(char c)
{switch (c){case '+':return 1;case '-':return 1;case '*':return 2;case '/':return 2;case '^':return 3;case '(':return 0;case ')':return 0;default:return -1;}
}
int js(int x, int y, char t)
{switch (t){case '+':return x + y;case '-':return x - y;case '*':return x * y;case '/':return x / y;case '^':return pow(x, y);default:return -0x3f3f3f3f;}
}
void change(string s)
{int len = s.size();for (int i = 0; i < len; i++){if (isdigit(s[i]))dat.push(s[i]);else if (s[i] == '(')op.push(s[i]);else if (s[i] == ')'){char t = op.top();while (t != '('){op.pop();dat.push(t);t = op.top();}op.pop();//要弹出左括号}else if (check(s[i]) >= 1 && check(s[i]) <= 3)//为运算符{if (!op.empty()){char t = op.top();while (!op.empty() && check(s[i]) <= check(t)){if (check(s[i]) == check(t) && s[i] == '^')break;//在s[i]与栈顶都是^号时也能进栈op.pop();dat.push(t);if (!op.empty())t = op.top();}}op.push(s[i]);}}while (!op.empty()){char t = op.top();op.pop();dat.push(t);}while (!dat.empty()){char t = dat.top();dat.pop();op.push(t);}while (!op.empty()){char t = op.top();cout << t << ' ';op.pop();dat.push(t);}cout << endl;
}
void calc()
{while (!dat.empty()){char t = dat.top();dat.pop();op.push(t);}while (!op.empty()){char t = op.top();op.pop();if (isdigit(t))num.push(t - '0');else{int x = num.top();num.pop();int y = num.top();num.pop();num.push(js(y, x, t));//传参数时要把x和y反过来while (!num.empty()){int t = num.top();num.pop();dat2.push(t);}while (!dat2.empty()){int t = dat2.top();cout << t << ' ';dat2.pop();num.push(t);}while (!op.empty()){char t = op.top();cout << t << ' ';op.pop();dat.push(t);}while (!dat.empty()){char t = dat.top();dat.pop();op.push(t);}cout << endl;}}
}
int main()
{string s;cin >> s;change(s);calc();return 0;
}

5.机器翻译 

https://www.luogu.com.cn/problem/P1540

import java.util.*;/*** Author : yjy* Desc*/
public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int N = sc.nextInt();int M = sc.nextInt();int[] arr = new int[M];for(int i=0;i<M;i++){arr[i] = sc.nextInt();}int res = 0;Queue<Integer> queue = new LinkedList<>();for (int i = 0; i < M; i++) {if(queue.contains(arr[i])){continue;}else{if(queue.size()==N){queue.poll();}queue.offer(arr[i]);res++;}}System.out.println(res);}
}

 

#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
int n, m, x, ans, l, r, a[1005], b[1005];
int main()
{cin >> m >> n;l = 0, r = 0;//初始化两个指针for (int i = 1; i <= n; i++) {scanf("%d", &x);//边读边做if (a[x] == 0) {//没有被访问过ans++;r++;b[r] = x; a[x] = 1;if (r > m) {l++; a[b[l]] = 0;}}}cout << ans;return 0;
}

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

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

相关文章

C++开发基础之初探CUDA计算环境搭建

一、前言 项目中有使用到CUDA计算的相关内容。但是在早期CUDA计算环境搭建的过程中&#xff0c;并不是非常顺利&#xff0c;编写此篇文章记录下。对于刚刚开始研究的你可能会有一定的帮助。 二、环境搭建 搭建 CUDA 计算环境涉及到几个关键步骤&#xff0c;包括安装适当的 C…

分析示例 | Simufact焊接工艺仿真变形精确预测汽车结构

导语 焊接是汽车制造过程中一个关键环节&#xff0c;白车身、发动机、底盘和变速箱等都离不开焊接工艺的应用&#xff0c;主要涉及气保焊、电阻点焊、激光焊、电子束焊等多种焊接工艺。由于汽车车型众多、成形结构复杂、汽车制造质量、效率、成本等方面的综合要求。如何高效、…

杰理AC632N提升edr的hid传输速率, 安卓绝对坐标触摸点被识别成鼠标的修改方法

第一个问题: 首先修改edr的hid传输速率.修改你的板级配置,里面的一个地方给注释掉了,请打开那个注释就能提升edr的hid传输效率了 第二个问题: 修改632n系别把触摸板的hid报告描述符识别成鼠标点,修改如下: 注释掉上面的pnp,改成下面的

element plus的容器组件

element-plus的容器组件主要有el-container,el-aside,el-header,el-main,el-footer,后面4个组件其父组件必须是el-container。 el-container采用flex布局&#xff0c;如果其子元素包含el-header或el-footer时会采用垂直布局&#xff0c;否则会采用水平布局&#xff0c;可设置其…

教程 | Navicat 17 管理连接新方法

Navicat 17 提供了比以往更多的连接数据库实例的方式。除了传统的连接字符串方式以外&#xff0c;Navicat 17 还支持 URI 连接&#xff0c;无论身在何处&#xff0c;都可以轻松地通过 URI 访问对象。另外&#xff0c;还有一个新的管理连接功能&#xff0c;即允许你通过一个以用…

大数据揭秘

起源 不管是国内&#xff0c;国外的招聘目前数据分析工程师&#xff0c;或者是大数据工程师我感觉都是处于启蒙阶段&#xff0c;对于数据分析或者大数据没有什么体系技术栈一说&#xff0c;相比于前后端&#xff0c;除了高端互联网企业其他的企业招数据分析工程师我认为目前都…

【全开源】房屋出租出售预约系统(FastAdmin+ThinkPHP+Uniapp)

房屋出租出售预约系统&#xff1a;一站式解决房产交易难题 一款基于FastAdminThinkPHPUniapp开发的房屋出租出售预约系统&#xff0c;支持小程序、H5、APP&#xff0c;包含房客、房东(高级授权)、经纪人(高级授权)三种身份。核心功能有&#xff1a;新盘销售、房屋租赁、地图找…

Python 技巧分享:NEF 文件的元数据提取

介绍 随着摄影技术的不断发展&#xff0c;NEF 文件作为尼康相机的 RAW 格式文件&#xff0c;因其包含丰富的图像数据和元数据&#xff0c;备受摄影爱好者和专业摄影师的青睐。提取 NEF 文件中的元数据对照片管理、分析及处理具有重要意义。本文将介绍如何使用 Python 技术&…

慎投!Hindawi这本SCI还在检,这里已被踢!新增14本Scopus期刊被剔除!

本周投稿推荐 SSCI • 中科院2区&#xff0c;6.0-7.0&#xff08;录用友好&#xff09; EI • 各领域沾边均可&#xff08;2天录用&#xff09; CNKI • 3天内初审录用&#xff0c;随即出版&#xff08;急录友好&#xff09; SCI&EI • 4区生物医学类&#xff0c;0…

电商数据驱动的决策智慧:深度解析数据采集与应用||电商API接口接入与应用

引言 在数字化时代&#xff0c;数据已成为电商企业最宝贵的资产之一。通过有效的数据采集&#xff0c;企业能够洞察市场动态、理解消费者需求、优化运营策略&#xff0c;从而在激烈的市场竞争中脱颖而出。本文将深入探讨电商数据采集的重要性、常用方法以及应用实践。 一、电商…

C语言—内存函数

1. memcpy 使用和模拟实现 void* memcpy&#xff08;void* destination&#xff0c;const void* source&#xff0c;size_t num&#xff09;&#xff1b; 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。这个函数在遇到 ‘\0’ 的时候并不…

神经网络 torch.nn---Convolution Layers

torch.nn — PyTorch 2.3 documentation torch.nn - PyTorch中文文档 (pytorch-cn.readthedocs.io) torch.nn和torch.nn.functional的区别 torch.nn是对torch.nn.functional的一个封装&#xff0c;让使用torch.nn.functional里面的包的时候更加方便 torch.nn包含了torch.nn.…

Linux日志服务rsyslog深度解析(上)

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Linux &#xff1a;从菜鸟到飞鸟的逆袭》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、日志在Linux系统中的作用 2、rsyslog历史背景 …

保姆级讲解 FTP服务器的搭建、配置与管理

本来目录很长的 因为感觉不太美观 所以小标题都删掉了 本文介绍了 本地用户的FTP服务器搭建实例匿名用户的FTP服务器搭建实例虚拟用户的FTP服务器搭建实例企业常见类型搭建实验 配置与管理FTP服务器 配置与管理FTP服务器一、FTP相关知识二、项目设计与准备三、项目实施四、认识…

MyBatisPlus——入门到进阶

✅作者简介&#xff1a;大家好&#xff0c;我是 Meteors., 向往着更加简洁高效的代码写法与编程方式&#xff0c;持续分享Java技术内容。&#x1f34e;个人主页&#xff1a;Meteors.的博客&#x1f49e;当前专栏&#xff1a;知识分享、知识备份✨特色专栏&#xff1a; 知识分享…

【GIS教程】土地利用转移矩阵

随着科技社会的不断进步&#xff0c;人类活动对地理环境的影响与塑造日益明显&#xff0c;土地不断的侵蚀与改变也导致一系列的环境问题日益突出。土地利用/覆盖&#xff08;LUCC&#xff09;作为全球环境变化研究的重点问题为越来越多的国际研究机构所重视&#xff0c;研究它的…

Day25 首页待办事项及备忘录添加功能

​ 本章节,完成首页待办事项及备忘录添加功能 一.修改待办事项和备忘录逻辑处理类,即AddMemoViewModel和AddTodoViewModel 在 AddMemoViewModel逻辑处理类中,为了支持与其关联的View视图文件的数据绑定,需要定义一个与视图文件相匹配的实体类 Model。这个Model将包含 View中…

图像算法---自动对焦AF

一&#xff0c;CDAF反差对焦原理 CDAF&#xff0c;全称Contrast Detection Auto Focus&#xff0c;即反差式对焦或对比度检测自动对焦&#xff0c;是一种广泛应用于入门级数码相机和相机模块化智能手机上的自动对焦技术。以下是关于CDAF反差对焦的详细介绍&#xff1a; 工作原…

每日AI资讯-20240606

智普AI推出全新开源大模型GLM-4-9B 智谱AI日前推出全新开源模型GLM-4-9B&#xff0c;该尺寸模型首次具备多模态能力。据了解&#xff0c;GLM-4-9B&#xff0c;最高支持1M/约两百万字上下文输入&#xff0c;相当于2本《红楼梦》或125篇论文的长度。性能上&#xff0c;GLM-4-9B函…

《手把手教你》系列练习篇之13-python+ selenium自动化测试 -压轴篇(详细教程)

1. 简介 “压轴”原本是戏曲名词&#xff0c;指一场折子戏演出的倒数第二个剧目。在现代社会中有很多应用&#xff0c;比如“压轴戏”&#xff0c;但压轴也是人们知识的一个盲区。“压轴”本意是指倒数第二个节目&#xff0c;而不是人们常说的倒数第一个&#xff0c;倒数第一个…