洛谷:线性表

     今天开始刷洛谷,之前刷leetcode都是核心代码模式,现在突然让我用ACM模式,刚开始还是很不习惯的,但做了几道题好点了,只能说洛谷题的难度是比leetcode大的。

    还有就是,STL牛逼!

1.询问学号(vector)

#include<iostream>
#include<vector>
using namespace std;
int main()
{vector<int>ret;int n,m,a,b;cin>>n>>m;while(n--){cin>>a;ret.push_back(a);}while(m--){cin>>b;cout<<ret[b-1]<<endl;}}

       这道题还是比较简单的,首先我们要想用什么数据结构来存储数据,我们看到,要存储n名同学的学号,其次要询问第i个进入教室的同学的学号,什么数据结构能让我们在知道下标的情况下快速访问呢,那必然是数组啊,所以我先定义了一个动态变化的vector数组用来存储n名同学的学号,然后就是先获取学生个数和访问次数,然后输入这n名同学的学号,之后就是知道了下标b,直接输出ret[b-1]即可,还是很简单的。

2.寄包柜(map)

#include <iostream>
#include<map>
#include<cstdio>
using namespace std;
map <int, int> mat[100005];  
int main() {int n, q;scanf("%d%d", &n, &q);while (q--) {int x, i, j, k;scanf("%d", &x);if (x == 1) {scanf("%d%d%d", &i, &j, &k);  mat[i][j] = k;  } else {scanf("%d%d", &i, &j);printf("%d\n", mat[i][j]); }} return 0;
}

     这道题的核心是如何根据给出的第i个寄包柜来获取有多少格子,你肯定会首先想到用二维数组来做,但不好意思,你看看数量级,如果我们要访问第10^5寄包柜,好,我们开辟了这么多空间,前面的用不到啊,这不是在浪费空间还是在干什么?什么?你说vector容器,好家伙,vector容器的下标也是连续的啊,你访问第i个,前面的空间肯定也开辟出来了啊,本质还是数组。那就没有什么办法了?那肯定是没.......肯定有啊,想啥呢?

      我们使用map关联容器来做,map主要用来存储和检索集合中的数据元素,里面的数据均成一种映射关系,是一种包含关键字和值的键值对,关键字和值可以是字符串,数字等等,map里面的元素都是一个键值对,所以我们通过寄包柜和格子的映射关系来进行高效地存储和查找,当我们知道第i个寄包柜试,就通过map快速查找有多少个格子,这是离散并非连续的。

       所以我们定义一个map,第一个int是第几个柜子,第二个int是该柜子的格子数量,格子是有序的,当x=1时,我们就往第i个寄包柜的第j个格子里放物品;当x=2时,我们就输出第i个柜子的第j个格子的物品是什么。

3.验证栈序列(stack)

#include<iostream>
#include<stack>
using namespace std;
stack<int>stk;
int q,n;
int main()
{cin>>q;while(q--){cin>>n;int a[n+1],b[n+1],cnt=1; for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<=n;i++)cin>>b[i]; for(int i=1;i<=n;i++){stk.push(a[i]);while((stk.top())==b[cnt]){stk.pop();cnt++;if(stk.empty())break;//这里也要注意,当我们已经比对完所有的元素时,假如都能比对上,则此时栈已经空了,如果我们还继续进行循环执行pop操作是会出错的,所以要对栈是否为空进行判断。}}if(stk.empty()) cout<<"Yes"<<endl;else cout<<"No"<<endl;while(!stk.empty())stk.pop();//如果前面栈不为空一定要清空栈再进入下一次循环}return 0; 
}

     这个题已经不能再明显了,肯定栈的题,我们先获取入栈序列和出栈序列,然后对栈进行入栈(push)操作,全部入栈完毕后,我们一个一个元素进行比较,如果相同,则将该栈元素弹出,cnt++,继续比较下一个,需要注意的点我在上面已经写了,栈为空时结束循环,此时也要进行判断,如果栈为空说明出栈序列是对的输出"Yes",否则输出"No",最后一定要把栈清空再进入下一次循环!

4.约瑟夫问题(queue)

#include<iostream>
#include<queue>
using namespace std;
int main()
{queue<int>q;int n,m;int num=1;cin>>n>>m;for(int i=1;i<=n;i++){q.push(i);}while(!q.empty()){if(num==m){cout<<q.front()<<" ";q.pop();num=1;}else{num++;q.push(q.front());//队首的人压到队尾q.pop(); //删除队首的人 }}cout<<endl;return 0;
}

     这道题第一次在leetcode没做出来,在洛谷上用queue容器秒了。

     约瑟夫问题也是一个很经典的问题,n个人围成一个圈圈,给定一个数字k,从第一个人开始报数,数到k的人出圈,其他人依旧围成一个圈,同时出圈的人的下一个人从1开始报数,最后所有人都会出圈,我第一次想到循环队列,其实也可以用链表做,但个人认为循环队列超级简洁。

     首先定义一个队列,用num来记录编号到哪个人时num=m,然后就是向队列中插数,当队列不为空时,如果我的num不等于m的话,说明不是这个人,那我们就把队首的人压到队尾,同时删除队首的人,一直到num=m时,我们找到了第一个出局的人,把它输出并删除,同时令num=1,寻找下一个人。

5.机器翻译(queue)

#include<iostream>
#include<queue>
using namespace std; 
queue<int>q;
int m,n;
int cnt[1005]={0};//如果把数组放在主函数外,全部初始化为0,放在主函数内就是随机值,这时候就要初始化为0
int main()
{int ans=0;cin>>m>>n;int word;while(n--){cin>>word;if(cnt[word])continue;else{if(q.size()>=m){ cnt[q.front()]=0;//顺序不能调换,一旦调换就获取不到原来的队首元素了q.pop();}q.push(word);ans++;cnt[word]++;}}cout<<ans;return 0;
}

     这道题看前面的文字描述可能有点头皮发麻,直接看样例解释我们可以清楚这是一个在一端插入元素,在另一端删除元素的队列问题,需要注意的是,队列并没有count函数哦,我们需要用一个cnt数组来统计单词是否在字典中,输入单词,如果出现过就continue跳过,如果没有出现过,进一步判断队列是否已满,没满直接插入,ans++,cnt[word]++即可;如果已经满了,就先令队首元素在cnt数组的值为0,因为此时这个单词已经被删除了,查询结束返回ans即可。

    还有一点就是在定义数组的时候一定要定义在主函数外面啊,如果定义在主函数里面而且你不初始化,数组里面就全是随机值,因为这个卡了一些时间,定义在主函数外面就是全局变量,你自己忘了初始化,系统也会自动给你初始化为0的,但在主函数里面就不会,需要自己进行初始化。

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

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

相关文章

具有权威性的工信部证书怎么考

工信部证书的考试流程如下&#xff1a; 选择正规报考机构&#xff1a;选择一家权威的培训机构或考试中心&#xff0c;确保其具有相应的资质和经验。 提交个人报考资料&#xff1a;根据考试机构的要求&#xff0c;提交相关的个人报考资料&#xff0c;如身份证、学历证明、工作…

【kubernetes】集群网络(一):基础篇

Flannel 1 路由表 & arp & fdb 1.1 路由表 任何网络设备都需要路由表&#xff0c;路由表用来决定&#xff0c;当收到数据包时&#xff0c;该向哪里进行转发。路由表项通常会包含以下几个字段&#xff1a; Destination&#xff1a;目的地Gateway&#xff1a;网关Mas…

【DDD领域驱动篇】如何理解领域驱动设计?

如何理解领域驱动设计? ✔️典型解析✔️扩展知识仓库✔️DDD带来的好处✔️DDD 的不足 ✔️典型解析 领域动设计(Domain-Driven Design&#xff0c;DDD)是一种软件开发方法论&#xff0c;将业务领域作为软件设计的核心&#xff0c;以便更好地满足业务需求。 DDD认为&#xff…

数据结构学习 Leetcode322 零钱兑换

关键词&#xff1a;动态规划 完全背包 记忆化搜索 一个套路&#xff1a; 01背包&#xff1a;空间优化之后dp【target1】&#xff0c;遍历的时候要逆序遍历完全背包&#xff1a;空间优化之后dp【target1】&#xff0c;遍历的时候要正序遍历 题目&#xff1a; 方法一&#xff…

【Linux】Linux服务器ssh密钥登录

ssh密码登录 ssh root地址 #需要输入密码ssh密钥登录 Linux之间密钥登录 生成公私钥 #生成公钥私钥 ssh-keygen #默认目录&#xff0c;默认密码空ssh-copy-id #拷贝ID到目标服务器 ssh-copy-id -i id_rsa.pub root192.168.8.22 ssh-copy-id -i id_rsa.pub root192.168.8.33…

把这些软件测试经典面试题!全背下来,拿offer就像喝水一样!

1、什么是兼容性测试&#xff1f;兼容性测试侧重哪些方面&#xff1f; 兼容测试主要是检查软件在不同的硬件平台、软件平台上是否可以正常的运行&#xff0c;即是通常说的软件的可移植性。兼容的类型&#xff0c;如果细分的话&#xff0c;有平台的兼容&#xff0c;网络兼容&am…

C语言实验1:C程序的运行环境和运行C程序的方法

一、算法原理 这是学C语言的入门&#xff0c;并不需要很高深的知识&#xff0c;一个hello world 或者一个简单的加法即可 二、实验要求 了解所用的计算机系统的基本操作方法&#xff0c;学会独立使用该系统。 了解在该系统上如何编辑、编译、连接和运行一个C程序。 通过运…

无法连接虚拟机设备 ide1:0,因为主机上没有相应的设备。您要每次在开启此虚拟机时都尝试连接此虚拟设备吗?

Vmware报错&#xff1a; 报错原因&#xff1a; ide1:0一般是虚拟机的光驱&#xff0c;配置选项是“使用物理驱动器”&#xff0c;而宿主机可能没有安装光驱&#xff0c;故无法从驱动器上寻找 .ISO 系统文件。 解决方法: 右键点击对应的虚拟机&#xff0c;再点击“设置”按钮。…

案例195:基于微信小程序的购物商城系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

Vue3-27-路由-路径参数的简单使用

什么是路径参数 在路由配置中&#xff0c;可以将【参数】放在【路由路径】中&#xff0c; 从而实现&#xff0c;同一个 路由&#xff0c;同一个组件&#xff0c;因路径参数不同&#xff0c;可以渲染出不同的内容。特点 &#xff1a; 1、当携带不同路径参数的路由相互跳转时&am…

【论文阅读】Realtime multi-person 2d pose estimation using part affinity fields

OpenPose&#xff1a;使用PAF的实时多人2D姿势估计。 code&#xff1a;GitHub - ZheC/Realtime_Multi-Person_Pose_Estimation: Code repo for realtime multi-person pose estimation in CVPR17 (Oral) paper&#xff1a;[1611.08050] Realtime Multi-Person 2D Pose Estima…

Bind for 0.0.0.0:2379 failed: port is already allocated

1、执行命令docker-compose -p docker-apisix up -d 报错 Error response from daemon: driver failed programming external connectivity on endpoint docker-apisix-etcd-1 (2a92a0cefff9194fcd1dad4bdeabf4201d9047ec2633eda455c6e46528668af4): Bind for 0.0.0.0:2379 fa…

NLP论文阅读记录 - 02 | 2022 自动文本摘要方法:综合回顾

文章目录 前言0、论文摘要一、Introduction1.1文本摘要的要求1.2主要研究贡献 二.ATS的分类2.1基于没有。输入文档的数量2.2 基于总结方法2.3 基于输出摘要性质&#xff1a;2.4 基于摘要语言2.4.1 基于摘要算法2.5 基于摘要内容2.6 基于摘要类型2.7 基于概括域2.8 基于加工水平…

Your password does not satisfy the current policy requirements

密码策略问题异常信息&#xff1a; ERROR 1819 (HY000): Your password does not satisfy the current policy requirements1、查看 mysql 初始的密码策略&#xff0c; 输入语句 “ SHOW VARIABLES LIKE validate_password%; ” 进行查看 2.首先需要设置密码的验证强度等级&am…

删除数据后, redis 内存占用还是很高怎么办?

现象&#xff1a; reids 做了数据删除&#xff0c;数据量不大&#xff0c;使用 top 命令看&#xff0c;发现还是占用大量内存 原因&#xff1a; 1.redis 底层内存根据内存分配器分配&#xff0c;不会立刻释放 2.redis 释放的内存空间不是连续的&#xff0c;存在碎片 内存碎…

编译错误:C4056E type of input file ‘xxx‘ unknown

最近在Proteus上面进行仿真&#xff0c;将编译后的hex文件导入到电路图中&#xff0c;进行程序运行的时候&#xff0c;Proteus报了这么一个错误&#xff1a;Error: C4065E: type of input file Pian unknown 我上网一搜&#xff0c;好像与文件名称中存在空格有关&#xff0c;导…

百度飞桨文心生态成果最新披露:开发者达1070万 模型数超86万

12月28日&#xff0c;由深度学习技术及应用国家工程研究中心主办的WAVE SUMMIT深度学习开发者大会2023在北京召开。百度首席技术官、深度学习技术及应用国家工程研究中心主任王海峰现场公布了飞桨文心五载十届最新生态成果&#xff0c;文心一言最新用户规模破1亿&#xff0c;截…

uniapp 新建组件

1. 新建文件夹 components 文件夹名称必须是 components &#xff0c;否则组件无法自动导入 2. 新建组件 3. 编辑组件 components/logo/logo.vue <template><img src"https://img.alicdn.com/imgextra/i1/O1CN01EI93PS1xWbnJ87dXX_!!6000000006451-2-tps-150-15…

CNN实现对手写字体的迭代

导入库 import torchvision import torch from torchvision.transforms import ToTensor from torch import nn import matplotlib.pyplot as plt 导入手写字体数据 train_dstorchvision.datasets.MNIST(data/,trainTrue,transformToTensor(),downloadTrue) test_dstorchvis…

Windows实现MySQL5.7主从复制(详细版)

使用免安装版本&#xff08;官网下载地址&#xff09; 在Windows上安装两种MySQL服务并同时开启服务 1.下载配置 打开解压文件所在位置&#xff0c;就新建一个配置文件my.ini。 2.主库安装 主库的my.ini配置文件如下&#xff1a; [mysqld] #设置主库端口&#xff0c;注意须是…