算法基础精选题单 模拟 (个人题解)

前言:

  从今天开始刷牛客上的这份题单,为暑假的牛客多校集训做准备,题单上一共有237道题,要想在集训开始前刷完难度还是很大的,但我一定会坚持下来,希望在这段时间内我能真正入门算法竞赛。接下来这三道题都与模拟有关,一般出现在比赛的一二题吧(比如蓝桥杯的填空),这三道题写下来我感觉虽然题目难度不是很大,但很需要时间和细心,而且基本要交上好几遍才能过。需要考虑的情况非常多,很容易就少考虑了,所以以后在面对这些题一定要多考虑情况,建议多写几个样例自己跑一下看看对不对(题干给的样例一定不会兼顾所有情况)。

正文:

题单:237题】算法基础精选题单_ACM竞赛_ACM/CSP/ICPC/CCPC/比赛经验/题解/资讯_牛客竞赛OJ_牛客网 (nowcoder.com)

字符串的展开:

  

#include<bits/stdc++.h>
using namespace std;
vector<char> v;
int main(){
	int a,b,c;
	cin>>a>>b>>c;
	string s;
	cin>>s;
    int cnt;
	for(int i=0;i<s.size();i++){
        cnt=v.size();
		if(s[i]!='-')v.push_back(s[i]);
		else{
            if(s[i-1]=='-'||s[i+1]=='-'){
                v.push_back('-');
				continue;
            }
            if(i==0||i==s.size()-1){
                v.push_back('-');
				continue;
            }
			if(s[i-1]==s[i+1]||abs(s[i+1]-s[i-1])>=40||s[i+1]<=s[i-1]){
				v.push_back('-');
				continue;
			}
			for(int k=s[i-1]+1;k<s[i+1];k++){
				//cout<<k<<endl;
				if(a==3){
					for(int j=1;j<=b;j++){
						v.push_back('*');
					}
				}
				if(a==1&&k>60){
					for(int j=1;j<=b;j++){
						v.push_back(char(k));
					}
				}
				if(a==2&&k>60){
					for(int j=1;j<=b;j++){
						v.push_back(char(k-32));
					}
				}
				if(a!=3&&k<60){
					for(int j=1;j<=b;j++){
						v.push_back(char(k));
					}
				}
			}
			if(c==2){
				reverse(v.begin()+cnt,v.end());
			}
		}
	}
	for(vector<char>::iterator it=v.begin();it!=v.end();it++){
		cout<<*it;
	}
	return 0;
}

  以下情况需要重点考虑:

  1. 开头和结尾的‘-’,如“-a-d-”
  2. 连续的‘-’,如“---”
  3. 数字和字母之间的‘-’,如“1-a”
  4. ‘-’左侧的字符大于右侧的,如“d-a

剩下的慢慢写就能搞出来了。

B 多项式输出:

#include<bits/stdc++.h>
using namespace std;
int a[105];
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n+1;i++){
		cin>>a[i];
		if(i==1){
			if(a[i]==1){
				if(i==n+1)cout<<a[i];
				else cout<<"x^"<<n+i-1;
			}
			else if(a[i]==-1){
				if(i==n+1)cout<<'-'<<a[i];
				else cout<<"-x^"<<n+i-1;
			}
			else if(a[i]>1){
				if(i==n+1)cout<<a[i];
				else cout<<a[i]<<"x^"<<n+i-1;
			}
			else if(a[i]<-1){
				if(i==n+1)cout<<a[i];
				else cout<<a[i]<<"x^"<<n+i-1;
			}
			continue;
		}
		if(a[i]!=0){
			if(i==n+1){
				if(a[i]>0)cout<<'+'<<a[i];
				else cout<<a[i];
				break;
			}
			if(a[i]!=1&&a[i]!=-1){
				if(a[i]>0){
					if(n-i+1==1)cout<<'+'<<a[i]<<'x';
					else cout<<'+'<<a[i]<<"x^"<<n-i+1;
				}
				else if(a[i]<0){
					if(n-i+1==1)cout<<a[i]<<'x';
					else cout<<a[i]<<"x^"<<n-i+1;
				}
			}
			else{
				if(a[i]==1){
                    if(n-i+1==1)cout<<"+x";
                    else cout<<"+x^"<<n+1-i;
                }
				if(a[i]==-1){
                    if(n-i+1==1)cout<<"-x";
                    else cout<<"-x^"<<n-i+1;
                }
			}
		}
	}
	return 0;
}

从前往后依次处理每一项,依次考虑符号、系数、x、x的次数:

  1. 如果系数是0,则直接continue;
  2. 如果不是第一个非零项,且系数是正的,则输出'+';如果系数是负的,则无条件输出'-';
  3. 如果系数的绝对值不是1,或者是常数项,则输出系数的绝对值;
  4. 如果次数不为0,则输出x
  5. 如果次数大于1,则输出次数

C 机器翻译:

#include<bits/stdc++.h>
using namespace std;
vector<int> q;
int main(){
	int n,m,ans=0;
	cin>>m>>n;
	while(n--){
		int x;
		cin>>x;
		int flag=1;
		for(vector<int>::iterator it=q.begin();it!=q.end();it++){
			if(*it==x){
				flag=0;
				break;
			}
			//cout<<flag<<endl;
		}
		if(flag){
			ans++;
			if(q.size()==m){
				q.erase(q.begin());
				q.push_back(x);
			}
			else{
				q.push_back(x);
			}
		}
	}
	cout<<ans<<endl;
}

用vector来模拟翻译过程,若vector内没有该词,且大小没到m就直接加进最后,若满了就删去vector首项(最早进入内存)再加进最后。若vector内有该词就直接continue掉。

后记:

  总的来说我认为模拟考查的主要是讨论情况的能力,以及在代码量较大的情况下能够合理的按情况用合适的解法写出代码

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

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

相关文章

机械臂抓取物体整体的开发流程

开发一个机械臂抓取物体的系统涉及多个步骤和不同领域的知识&#xff0c;包括机械设计、控制系统、传感器集成、软件开发等。以下是一个全面的开发流程概述&#xff1a; 1. 需求分析与系统设计 需求分析&#xff1a; 明确机械臂需要抓取的物体类型&#xff08;大小、重量、材…

实用技巧,用lsof命令监控tar文件解压进度,简单有效!

在Linux系统中&#xff0c;tar命令是一个非常常用的工具&#xff0c;用于创建和解压缩归档文件。尽管tar命令本身没有提供直接查看解压进度的功能&#xff0c;但我们可以借助lsof&#xff08;List Open Files&#xff09;命令来间接监控解压进度。本文将详细介绍如何使用lsof命…

Drake 机器人仿真

sudo apt-get install&#xff0c;pip3 install&#xff0c;sudo apt install这些命令是在Linux系统中用于安装软件包或Python库的不同方法&#xff0c;它们分别属于不同的包管理系统和工具。 sudo apt-get install&#xff1a; 这是在Debian、Ubuntu等基于Debian的系统上用于从…

Android Studio 2024.1.1(Koloa)版本 Profiler 工具变动

在 Android Studio 2024.1.1 (Koloa) 版本当中&#xff0c;Profiler 工具终于迎来了重大 UI 更新&#xff08;太感动了&#xff0c;因为之前的 Profiler 工具连接得慢&#xff0c;收集 Trace 信息还很卡&#xff0c;步骤繁琐等&#xff0c;这次更新有了很大的优化&#xff09; …

低代码组件扩展方案在复杂业务场景下的设计与实践

组件是爱速搭的前端页面可视化模块的核心能力之一&#xff0c;它将前端研发人员从无休止的页面样式微调和分辨率兼容工作中解放了出来。 目前&#xff0c;爱速搭通过内置的上百种功能组件&#xff08;120&#xff09;&#xff0c;基本可以覆盖大部分中后台页面的可视化设计场景…

Windows10笔记本如何系统重装?64位电脑重装系统需小心!一键安装超详细步骤!

在日常生活和工作中&#xff0c;我们有时会遇到Windows 10笔记本系统运行缓慢、频繁出现错误或受到病毒攻击等问题。这时&#xff0c;重装系统就成了解决这些问题的最佳选择。然而&#xff0c;对于许多用户来说&#xff0c;尤其是64位电脑用户&#xff0c;重装系统可能是一项既…

小程序开发平台源码系统商业运营版 带完整的安装代码包以及搭建教程

系统概述 小程序开发平台源码系统商业运营版 是一套基于现代技术栈开发的&#xff0c;专为中小企业及个人开发者设计的小程序快速开发与运营管理解决方案。该系统采用模块化架构设计&#xff0c;集成了代码生成器、可视化拖拽编辑器、多端适配引擎、云端部署、数据统计分析等多…

【JAVA】SpringBoot + skywalking 将接口的入参、出参、异常等信息上报到skywalking 链路追踪服务器上

【JAVA】SpringBoot skywalking 将接口的入参、出参、异常等信息上报到skywalking 链路追踪服务器上 1.下载SkyWalking APM https://skywalking.apache.org/downloads/ jdk8 不支持 SkyWalking APM 9.3.0以上版本&#xff0c;所以这里我们下载 9.3.0版本 2.下载 Java Agent …

网站的图片都是怎么处理的

我们平常见到的很多网站里面都有很多地图片&#xff0c;那么这些图片的文件是怎么处理的呢。图片是一个网站的重要元素之一&#xff0c;图片可以给用户直接的视觉冲击&#xff0c;好的图片则可以迎来不少的流量。图片有大有小&#xff0c;都是根据网站的局部需要而确定图片的尺…

清远mes管理系统助力企业降本增效

清远MES管理系统可以帮助企业降本增效的方式包括但不限于以下几个方面&#xff1a; 生产过程优化&#xff1a;清远MES系统可以实时监控生产过程中的各个环节&#xff0c;包括设备状态、生产进度、质量指标等&#xff0c;帮助企业管理人员及时了解生产情况并做出相应的调整和控制…

Redis作者长文总结LLMs, 能够取代99%的程序员

引言 这篇文章并不是对大型语言模型&#xff08;LLMs&#xff09;的全面回顾。很明显&#xff0c;2023年对人工智能而言是特别的一年&#xff0c;但再次强调这一点似乎毫无意义。相反&#xff0c;这篇文章旨在作为一个程序员个人的见证。自从ChatGPT问世&#xff0c;以及后来使…

10+分享:适合外包的开源后台管理系统【送源码】

1. D2admin 开源地址&#xff1a;https://github.com/d2-projects/d2-admin 文档地址&#xff1a;https://d2.pub/zh/doc/d2-admin/ 效果预览&#xff1a;https://d2.pub/d2-admin/preview/ 开源协议&#xff1a;MIT 2. vue-element-admin 开源地址&#xff1a;https://gi…

git删除已创建tag标签

前言 一不小心把tag标签名称复制错了&#xff0c;现将删除 1.删除本地标签 1.1.执行下面命令 git tag -d 1.5.2401161.5.240116是创建的tag标签名称 2.如果是删除远程的tag标签名称的话&#xff0c;看下面命令 2.1.删除远程标签 git push --delete origin <tagname>…

C++ SIMD性能优化

// 使用SIMD指令优化的向量加法 //<mmintrin.h> MMX //<xmmintrin.h> SSE //<emmintrin.h> SSE2 //<pmmintrin.h> SSE3 //<tmmintrin.h> SSSE3 //<smmintrin.h> SSE4.1 //<nmmintrin.h> SSE4.2 //<wmmintrin.h> AES //<imm…

算法解析:有序数组的平方(以JS为例)

题目&#xff1a; 算法解析 算法概述 这个算法的目标是计算一个数组中每个元素的平方&#xff0c;并将结果存储在一个新的数组中&#xff0c;同时保持结果数组的排序顺序。它使用了三个指针&#xff1a;i、j和k&#xff0c;分别指向当前考虑的较小元素、较大元素和结果数组的…

【数据结构】排序(下)

个人主页~ 排序&#xff08;上&#xff09; 栈和队列 排序 二、常见排序的实现8、快速排序的优化9、非递归快速排序&#xff08;1&#xff09;基本思想&#xff08;2&#xff09;代码实现&#xff08;3&#xff09;时间复杂度&#xff08;4&#xff09;空间复杂度 10、归并排序…

kali中安装zsteg教程

1、下载文件 git clone http://www.github.com/zed-0xff/zsteg 2、第一步需要保证虚拟机是有网络的&#xff0c;不然无法克隆 3、可以将网络设置成如下后重启&#xff0c;访问百度看看能不能访问&#xff0c;若可以访问&#xff0c;则进行下一步 4、查看源&#xff0c;删除源&…

✊构建浏览器工作原理知识体系(网络协议篇)

🌻 前言 书接上回~ 系列文章目录: # ✊构建浏览器工作原理知识体系(开篇)# ✊构建浏览器工作原理知识体系(浏览器内核篇)# ✊构建浏览器工作原理知识体系(网络协议篇)✊构建浏览器工作原理知识体系(网页加载超详细全过程篇)为什么你觉得偶尔看浏览器的工作原理,…

程序员日志之计算机相关专业还值得选择吗?

目录 传送门正文日志1、概要2、专业选择2.1、专业2.2、学校2.3、城市 3、计算机相关专业还值得选择吗&#xff1f; 传送门 SpringMVC的源码解析&#xff08;精品&#xff09; Spring6的源码解析&#xff08;精品&#xff09; SpringBoot3框架&#xff08;精品&#xff09; MyB…

【会议】一张图片讲清楚:项目启动会议

另附上启动会前需要准备的内容&#xff1a;