【ACM】—蓝桥杯大一暑期集训Day2

🚀欢迎来到本文🚀
🍉个人简介:陈童学哦,目前正在学习C/C++、Java、算法等方向,一个正在慢慢前行的普通人。
🏀系列专栏:陈童学的日记
💡其他专栏:C++STL,感兴趣小伙伴可以了解一下哦
🎁希望各位→点赞👍 + 收藏⭐️ + 留言📝 ​
⛱️万物随心起,心动则万物动🤺

在这里插入图片描述

Day2集训

  • 前言
  • A - 表达式的转换
    • 解题思路
    • 示例代码
  • B - Look Up S
    • 解题思路
    • 示例代码
  • C - ICPC Balloons
    • 解题思路
    • 示例代码
  • D - Rudolph and Cut the Rope
    • 解题思路
    • 示例代码
  • E - 后缀表达式
    • 解题思路
    • 示例代码
  • F - Pashmak and Flowers
    • 解题思路
    • 示例代码
  • 总结

前言

因参加了我校的ACM暑期集训为之后的xcpc等赛事做准备,所以就有了此文哈哈。本文主要复盘做题的过程以及一些感悟,便于复习巩固。辣么现在废话也不多说啦,直接往下看吧哈哈。

A - 表达式的转换

来源:洛谷P1175 表达式的转换
在这里插入图片描述
在这里插入图片描述

解题思路

本题是道用栈实现后缀表达式模拟题,但是实现过程还是有点复杂的,好家伙第一题就给我上难度是吧。
主要的就是注意下()以及2^ 2 ^ 3的是从后往前计算的。我自己刚开始是没做出来的,我看了题解的哈哈。

示例代码

#include <bits/stdc++.h>
using namespace std;
stack<char> s1,s2;
stack<int> s3,s4;
int judge1(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 judge2(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]))
			s1.push(s[i]);
		else if(s[i]=='(')
			s2.push(s[i]);
		else if(s[i]==')')
		{
			char t=s2.top();
			while(t!='(')
			{
				s2.pop();
				s1.push(t);
				t=s2.top();
			}
			s2.pop();
		}
		else if(judge1(s[i])>=1&&judge1(s[i])<=3)
		{
			if(!s2.empty())
			{
				char t=s2.top();
				while(!s2.empty()&&judge1(s[i])<=judge1(t))
				{
					if(judge1(s[i])==judge1(t)&&s[i]=='^')
						break;
					s2.pop();
					s1.push(t);
					if(!s2.empty())
						t=s2.top();
				}
			}
			s2.push(s[i]);
		}
	}
	while(!s2.empty())
	{
		char t=s2.top();
		s2.pop();
		s1.push(t);
	}
	while(!s1.empty())
	{
		char t=s1.top();
		s1.pop();
		s2.push(t);
	}
	while(!s2.empty())
	{
		char t=s2.top();
		cout<<t<<' ';
		s2.pop();
		s1.push(t);
	}
	cout<<endl;
}
void calc()
{
	while(!s1.empty())
	{
		char t=s1.top();
		s1.pop();
		s2.push(t);
	}
	while(!s2.empty())
	{
		char t=s2.top();
		s2.pop();
		if(isdigit(t))
			s3.push(t-'0');
		else
		{
			int x=s3.top();
			s3.pop();
			int y=s3.top();
			s3.pop();
			s3.push(judge2(y,x,t));//传参数时要把x和y反过来
			while(!s3.empty())
			{
				int t=s3.top();
				s3.pop();
				s4.push(t); 
			}
			while(!s4.empty())
			{
				int t=s4.top();
				cout<<t<<' ';
				s4.pop();
				s3.push(t);
			}
			while(!s2.empty())
			{
				char t=s2.top();
				cout<<t<<' ';
				s2.pop();
				s1.push(t);
			}
			while(!s1.empty())
			{
				char t=s1.top();
				s1.pop();
				s2.push(t);
			}
			cout<<endl;
		}
	}
}
int main()
{
	string s;
	cin>>s;   
	change(s);
	calc();
	return 0;
}

B - Look Up S

来源:洛谷P2947 [USACO09MAR] Look Up S
在这里插入图片描述
在这里插入图片描述

解题思路

本题可以用单调栈的思想解决,我这里用的是一种倒序递归的方法来优化时间的(学一位大佬的哈哈)。

示例代码

#include<iostream>
#include<cstdio>
using namespace std;
const int N=100010;
int n,t=1;
int a[N],b[N];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	for(int i=n-1;i>=1;i--){
		int j=i+1;
		while(a[i]>=a[j]&&a[j]>0)
			j=b[j];
		b[i]=j;
	}
	for(int i=1;i<=n;i++)
		cout<<b[i]<<endl;
	
}

C - ICPC Balloons

来源:t CodeForces-1703B. ICPC Balloons
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解题思路

本题暴力模拟一下就OK啦

示例代码

#include<bits/stdc++.h>
using namespace std;
int t,n,ans=0;
char c;
int main(){
	cin>>t;
	while(t--){
		int s[100005]={0};
		cin>>n;
		for(int i=1;i<=n;i++){
			cin>>c;
			if(s[c]==0){
				s[c]=1;
				ans+=2;
			} 
				
			else
				ans+=1;
		}
		cout<<ans<<endl;
		ans=0;
	}
}

D - Rudolph and Cut the Rope

来源:CodeForces - 1846A. Rudolph and Cut the Rope

在这里插入图片描述
在这里插入图片描述

解题思路

本题其实是道简单的模拟题,主要是能理解题意,题目的意思是所有的钉子都绑了不同的绳子一段,而这些不同绳子的另一端都绑了同一颗糖果,而想要这颗糖果落地的话,只需剪掉比绳子长度比钉子高度小的即可。

示例代码

#include <bits/stdc++.h>
using namespace std;
int t;
int n,a,b,ans;
int main()
{
    cin>>t;
    while(t--)
    {
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            cin>>a>> b;
            if(a>b) 
				ans++;
        }
        cout < ans<< endl;
        ans=0;
    }
}

E - 后缀表达式

来源:洛谷P1449 后缀表达式
在这里插入图片描述
在这里插入图片描述

解题思路

本题又是道后缀表达式的题,我们用数组来模拟栈。

示例代码

#include<iostream>
#include<cstdio>
using namespace std;
long long s[1005];
long long i=0,a=0;
char c;
int main(){
	while((c=getchar())!='@'){
		if(c>='0'&&c<='9'){
			a*=10;
			a+=c-'0';
		}else if(c=='.'){
			s[++i]=a;
			a=0;
		}else if(c=='+'){
			s[i-1]=s[i-1]+s[i];
			s[i]=0;
			i--;
		}else if(c=='-'){
			s[i-1]=s[i-1]-s[i];
			s[i]=0;
			i--;
		}else if(c=='*'){
			s[i-1]=s[i-1]*s[i];
			s[i]=0;
			i--;
		}else if(c=='/'){
			s[i-1]=s[i-1]/s[i];
			s[i]=0;
			i--;
		}
	}
	cout<<s[1]<<endl;
}

F - Pashmak and Flowers

来源:CodeForces - 459B. Pashmak and Flowers
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

解题思路

本题模拟走一遍便输入边找最大值、最大值个数、最小值、最小值个数就好了,注意特殊情况最大值最小值相同时的处理就好啦。

示例代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF=0x3f3f3f3f,N=500005;
ll n,x,y,maxn=-1,minn=INF,a[N];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		if(a[i]==maxn)
			x++;
		if(a[i]>maxn){
			maxn=a[i];
			x=1;
		}
		if(a[i]==minn)
			y++;
		if(a[i]<minn){
			minn=a[i];
			y=1;
		}		
	}
	if(maxn==minn)
		cout<<0<<" "<<n*(n-1)/2<<endl; //相同时双方是一样的所以需除以2
	else
		cout<<maxn-minn<<" "<<x*y<<endl;  //正常情况正常输出
}

总结

Day2的题主要考察的也是一些基础的算法,有些稍复杂。
算法:单调栈、线性结构、模拟、暴力
感悟:这些算法算也是较基础的,但还需多加练习达到更快解题
总结:每个算法都有其巧妙处,一些模拟题也是较为繁琐很是考察逻辑思维的

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL-分库分表详解(二)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xf…

Xcode报错--访问keychain,出现弹窗处理方案

情景 访问keychain弹出弹窗&#xff0c;不想人工点击&#xff0c;比如自动化测试中使用keychain中的证书的情况 原因 Mac的保护机制 处理 1、人工&#xff1a;输入Password&#xff0c;点击Allow或者Always Allow 2、命令行处理 security unlock-keychain -p "<…

Spring Batch之读数据库——JdbcCursorItemReader之自定义PreparedStatementSetter(三十八)

一、自定义PreparedStatementSetter 详情参考我的另一篇博客&#xff1a; Spring Batch之读数据库——JdbcCursorItemReader&#xff08;三十五&#xff09;_人……杰的博客-CSDN博客 二、项目实例 1.项目实例 2.代码实现 BatchMain.java&#xff1a; package com.xj.dem…

docker的安装以及常用命令详解

目录 一、docker简介 二、docker安装 三、常用命令 1、显示 Docker 版本信息 2、显示 Docker 系统信息&#xff0c;包括镜像和容器数 3、帮助 四、镜像管理 1、列出镜像 2、获取一个新的镜像 3、查找镜像 4、删除镜像 5、镜像导入与导出 五、容器生命周期 1、运行…

小程序form表单验证,validate 在更新数据以后不能验证?还是提示同样的错误

报错&#xff1a; 一直报手机号码必须填写&#xff0c;但是我已经填写了。 解决&#xff1a; 花了2个小时&#xff0c;最后发布是模式models写错了。 改完之后&#xff0c;终于提示别的错误了&#xff1a; 源码&#xff1a; //wxml <view class"welcome">欢…

安装Visual Studio Installer Projects 2022插件

VS主界面--扩展--管理扩展--搜索VS插件“Visual Studio Installer Projects 2022”并安装。

【多模态】1、几种多模态 vision-language 任务和数据集介绍

文章目录 一、Phrase Grounding1.1 概念介绍1.2 常用数据集介绍 二、Referring Expression Comprehension&#xff08;REC&#xff09;2.1 概念介绍2.2 常用数据集介绍 三、Visual Question Answer&#xff08;VQA&#xff09;3.1 概念介绍 四、Image Caption4.1 概念介绍 现在…

cookie 生命周期和cookie有效路径超级详细讲解

文章目录 cookie 生命周期和cookie有效路径超级详细讲解cookie 生命周期介绍代码示例完成测试 , 注意抓包看数据 cookie 有效路径有效路径规则规则如下:代码示例完成测试 , 注意抓包看创建 Cookie 时,返回的数据完成测试 , 注意抓包看读取 Cookie 时,返回的数据 代码示例html页…

bug:file name too long文件名超出系统最大限制

各操作系统支持最长的文件和目录名称长度&#xff08;Linux、Win、Mac&#xff09; 今天开发需求的时候发现无法新建文件&#xff0c;提示file name too lang&#xff0c;于是翻阅和查询了一些资料&#xff0c;发现不同操作系统下文件名和目录名最长的长度不同。 操作系统文件名…

elementUI 非表单格式的校验

在普通表单中对输入框、选择框都有校验案例。 但是在自定义非空中如何进行校验官网并没有说明 关键代码 clearValidate 方法清除校验 this.$refs.formValue.clearValidate(signinimg) 使用案例 <template><div class"stylebg"><Tabs icons"el-…

.net6中WPF的串口通信和USB通信

之前写过串口通信&#xff0c;不过是winform的。 c#使用串口进行通信_c# 串口通信_故里2130的博客-CSDN博客 今天说一下&#xff0c;.net6中wpf的串口通信和USB通信&#xff0c;在工控行业中&#xff0c;这2种的方式非常多&#xff0c;还有网口通信&#xff0c;它们都是用来和…

利用ChatGPT场景化学习英语听说读写

大家好&#xff0c;我是可夫小子&#xff0c;关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。加我&#xff0c;备注&#xff1a;chatgpt&#xff0c;拉你进群。 我们从初中就开始学习英语&#xff0c;到大学也有小十年&#xff0c;在这个过程中&#xff0c;我们投入了很…

提高驾驶安全性 | 基于ACM32 MCU的胎压监测仪方案

概述 作为车辆的基础部件&#xff0c;轮胎是影响行车安全不可忽视的因素之一。据统计&#xff0c;中国每年由胎压问题引起轮胎爆炸的交通事故约占 30%&#xff0c;其中 50%的高速交通事故是由车辆胎压异常引起。因此&#xff0c;准确实时地监测车辆在行驶过程中的轮胎压监测系…

Java List中通过对象属性排序,可实现多条件排序

直接上代码&#xff1a; import com.google.common.collect.Lists; import lombok.AllArgsConstructor; import lombok.Data;import java.util.Comparator; import java.util.List; import java.util.stream.Collectors;/*** List 对象属性排序*/Data AllArgsConstructor clas…

【Linux】进程概念

【Linux】进程概念 文章目录 【Linux】进程概念1、冯诺依曼体系结构2、操作系统2.1 概念2.2 设计OS的目的2.3 定位2.4 管理2.5 系统调用和库函数概念 3、进程3.1 基本概念3.2 描述进程—PCB3.3 组织进程3.4 查看进程3.5 获取进程标示符3.6 创建进程-fork初识3.7 进程状态3.7.1 …

Vue2 ➔ Vue3 都做了哪些改变?

不是吧&#xff0c;兄弟&#xff0c;Vue3 都出来多久了&#xff0c;你还对这个感兴趣&#xff0c;说&#xff01;是不是没好好卷&#xff1f;&#x1f60f; 俺也一样 &#x1f602;&#xff0c;Vue3 出来之后只是简单了解了一下&#xff0c;然后还是转头一直在写 Vue2。当然&a…

IIC的再认识

IIC介绍 关于IIC的基本概念&#xff0c;其实在学习89C52的时候已经大致了解过了&#xff0c;且由于STM32支持了IIC协议&#xff0c;所以在STM32中使用IIC可以直接调用HAL库的库函数&#xff1a; HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c,uint16_t DevAdd…

IP基础知识总结

IP他负责的是把IP数据包在不同网络间传送&#xff0c;这是网络设计相关的&#xff0c;与操作系统没有关系。所以这部分知识&#xff0c;不是网络的重点。IP和路由交换技术联系紧密。但是要作为基本知识点记住。 一、基本概念 网络层作用&#xff1a;实现主机与主机之间通信。 …

瀚高企业版数据库V6单机安装指导手册(Linux)

目录 瀚高企业版数据库V6单机安装指导手册&#xff08;Linux&#xff09; 1. 环境准备 1.1 防火墙设置 1.1.1 开放数据库使用端口 1.1.2 关闭防火墙 1.2 检查时区和时间 1.3 创建highgo用户 1.4 检验安装包 2. 软件安装 2.1 图形化安装 3. 设置highgo用户环境变量 4.…

mysql 1 -- 数据库介绍、mysql 安装及设置

Linux 安装 mysql 1、数据库&#xff08;mysql&#xff09; 数据文件 - 数据库过了系统 2、c/s mysql 服务器 mysql 客户端 ip port : 3306 3、关系型 于 非关系型数据库&#xff08;nosql&#xff09; nosql可以解决一些关系型数据库所无法实现的场景引用。 一、数据库介绍 …