【洛谷】单向链表、队列安排、约瑟夫问题(list相关算法题)

文章目录

  • 单向链表
    • 题目描述
    • 题目解析
    • 代码
  • 队列安排
    • 题目描述
    • 题目解析
    • 代码
  • 约瑟夫问题
    • 题目描述
    • 题目解析
    • 代码


单向链表

题目描述

在这里插入图片描述

题目解析

这道题因为有大量的任意位置插入删除,所以肯定不能用数组,用链表是最合适的,而在算法竞赛通常都用静态链表,所以这道题我们选用静态单链表。
这道题题目规定保证任何时间表中所有数字均不相同,所以我们可以用mp输入登记插入数据所在位置,高效率完成find操作。
三个操作每一个操作都需要先找到x的物理结构下标,所以我们先借助mp数组将x的下标存到p中,静态链表的插入删除操作小编专门出了一篇博客,感兴趣的读者可以移步:点击此处
需要注意的是首先删除操作时需要先将x在mp数组中删除再erase x,如果先erase x的话,后面删除x在mp数组的标记的操作就是删除的x的下一个结点在mp数组的标记了。然后题目规定一开始链表里除了哨兵位还有一个存1的结点。

代码

using namespace std;
#include <iostream>const int N = 1e6 + 10;  //单个数值的范围
const int M = 1e5 + 10;  //数量范围
int e[M], ne[M], mp[N],id, h;int main()
{id++;e[id] = 1;mp[1] = id;int q;cin >> q;int op, x, y;while (q--){cin >> op >> x;//p是x存的物理结构下标int p = mp[x];   if (op == 1){cin >> y;id++;e[id] = y;mp[y] = id;ne[id] = ne[p];ne[p] = id;}else if(op == 2){cout << e[ne[p]] << endl;}else{if (ne[p] != 0){mp[e[ne[p]]] = 0;ne[p] = ne[ne[p]];}}}return 0;
}

队列安排

题目描述

在这里插入图片描述

题目解析

我们先分析一下,这道题有频繁的任意位置插入删除,不能用顺序表只能用链表,而且是在指定位置的前面或者后面插入删除,那么只能用双向链表。
这道题很特殊,因为它的按顺序插入的,所以它的插入的顺序就是数组的物理下标,也等于e[
]数组里的值,所以id就等于插入的顺序j,(有就是for循环里的j的值)我们要之前要借助mp[
]才能找到的插入位置的数组下标在这道题就等于k。删除时题目规定不能重复删,那创建一个数组st来标记某个物理下标是否被删除过,被删除过就置为true,若判断当前位置为true,直接continue跳过当次循环操作。
最后因为数组的物理下标直接等于e[ ]数组里的值,所以直接循环遍历打印数组的物理下标。

代码

using namespace std;
#include <iostream>const int Q = 1e5 + 10;
int ne[Q], pre[Q], h;
bool st[Q]; //用来标记x位置是否被删除int main()
{ne[1] = h;pre[1] = h;ne[h] = 1;pre[h] = 1;int N;cin >> N;//插入int k, p;for (int j = 2; j <= N; j++){cin >> k >> p;if (p == 0){ne[j] = k;pre[j] = pre[k];ne[pre[k]] = j;pre[k] = j;}else{ne[j] = ne[k];pre[j] = k;pre[ne[k]] = j;ne[k] = j;}}//删除  int M, x;cin >> M;while (M--){cin >> x;if (st[x] == true)continue;ne[pre[x]] = ne[x];pre[ne[x]] = pre[x];st[x] = true;}//输出  for (int i = ne[h]; i; i = ne[i]){cout << i << " ";}return 0;
}

约瑟夫问题

题目描述

在这里插入图片描述

题目解析

这道题思路很多,小编这里创建一个双向循环链表来解决,要注意根据题意我们要用循环链表来模拟一个圈,所以不能带哨兵位。
首先创建出一个n个结点的链表。然后从下标为0开始,每遍历m个结点就把当前结点打印出来,然后删除当前结点,指针再指向删除结点的下一个结点,最后把所有结点删除停止循环们也就是循环n次。

代码

using namespace std;
#include <iostream>const int N = 100 + 10;
int e[N], ne[N], pre[N], id, h;int main()
{int m, n;cin >> n >> m;//初始化e[0] = 1;ne[0] = 0;pre[0] = 0;for (int i = 1; i < n; i++){e[i] = i + 1;ne[i] = 0;pre[i] = i - 1;pre[h] = i;ne[i - 1] = i;}//循环打印删除int cur = 0;while (n--){int tmp = m;while (--tmp){cur = ne[cur];}cout << e[cur] << " ";//删除cur所在结点ne[pre[cur]] = ne[cur];pre[ne[cur]] = pre[cur];cur = ne[cur];}return 0;
}

以上就是小编分享的全部内容了,如果觉得不错还请留下免费的关注和收藏如果有建议欢迎通过评论区或私信留言,感谢您的大力支持。
一键三连好运连连哦~~

在这里插入图片描述

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

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

相关文章

当人机交互迈向新纪元:脑机接口与AR/VR/MR的狂飙之路

从手机到 “头盔”&#xff1a;交互终端的变革猜想​​在当今数字化时代&#xff0c;智能手机无疑是我们生活中不可或缺的一部分。它集通讯、娱乐、办公等多种功能于一身&#xff0c;成为了人们与外界交互的主要窗口。然而&#xff0c;随着科技的飞速发展&#xff0c;智能手机作…

InfluxDB HTTP API 接口调用详解(二)

实际应用案例演示 1. 数据写入案例 假设在一个物联网设备数据采集场景中&#xff0c;有多个传感器设备持续采集环境的温度和湿度数据。我们以 Python 语言为例&#xff0c;使用requests库来调用 InfluxDB 的 Write 接口将数据写入 InfluxDB。 首先&#xff0c;确保已经安装了…

世运会线上知识竞赛答题pk小程序怎么做

随着2025年成都世界运动会的来临&#xff0c;越来越多的企事业单位组织员工进行线上知识竞赛&#xff0c;那么答题PK小程序该怎么做&#xff0c;接下来我们来一一分析&#xff1a; 世运会线上知识竞赛答题pk小程序怎么做一、答题功能&#xff1a;支持多种题型&#xff0c;如选择…

Java毕业设计 | 基于微信小程序的家校互动作业管理系统(Spring Boot+Vue.js+uni-app+AI,附源码+文档)

Java毕业设计 | 基于微信小程序的家校互动作业管理系统&#xff08;Spring BootVue.jsuni-app&#xff0c;附源码文档&#xff09;&#x1f3af; 毕业设计私人教练 专注计算机毕设辅导第 6 年&#xff0c;累计 1v1 带飞 800 同学顺利通关。从选题、开题、代码、论文到答辩&…

CentOS8 使用 Docker 搭建 Jellyfin 家庭影音服务器

CentOS8 使用 Docker 搭建 Jellyfin 家庭影音服务器 一、前言 由于 Jellyfin 的 GPL 协议和 Intel 的 media-driver (iHD) Linux 驱动&#xff08;部分开源&#xff09;在协议上不兼容的缘故&#xff0c;Jellyfin 官方的 Docker 镜像&#xff1a;jellyfin/jellyfin 并不包含 …

PyTorch武侠演义 第一卷:初入江湖 第4章:损失玉佩的评分风波

第一卷&#xff1a;初入江湖 第4章&#xff1a;损失玉佩的评分风波比武开幕 晨钟响彻山谷&#xff0c;PyTorch派三年一度的"模型比武大会"正式开始。各分舵弟子列队入场&#xff0c;林小码跟在Tensor大师身后&#xff0c;眼睛瞪得溜圆——只见&#xff1a; "卷积…

HttpServletRequestWrapper存储Request

HTTP请求的输入流只能被读取一次&#xff0c;再想获取就获取不到了&#xff0c;那有什么方法可以缓存呢&#xff0c;我们可以自定义一个HttpServletRequest&#xff0c;或者是想在请求参数中统一添加或删除参数也可以使用此类进行改造&#xff0c;然后通过过滤器继续向下流转。…

算法:数组part02: 209. 长度最小的子数组 + 59.螺旋矩阵II + 代码随想录补充58.区间和 + 44. 开发商购买土地

算法&#xff1a;数组part02: 209. 长度最小的子数组 59.螺旋矩阵II 代码随想录补充58.区间和 44. 开发商购买土地 209. 长度最小的子数组题目&#xff1a;https://leetcode.cn/problems/minimum-size-subarray-sum/description/ 文章讲解&#xff1a;https://programmercarl…

Spring 核心知识点梳理 1

目录 Spring Spring是什么&#xff1f; Spring中重要的模块 Spring中最重要的就是IOC(控制反转)和AOP(面向切面编程) 什么是IOC DI和IOC之间的区别 为什么要使用IOC呢&#xff1f; IOC的实现机制 什么是AOP Aop的核心概念 AOP的环绕方式 AOP发生的时期 AOP和OOP的…

Kafka运维实战 07 - kafka 三节点集群部署(混合模式)(KRaft 版本3.7.0)

目录环境准备主机准备补充说明JDK安装 (三台主机分别执行)下载jdkjdk安装kafka 部署(三台主机分别执行)kafka 下载kafka 版本号结构解析kafka 安装下载和解压安装包(3台主机都执行)配置 server.properties &#xff08;KRaft 模式&#xff09;192.168.37.10192.168.37.11192.16…

linux内核与GNU之间的联系和区别

要理解操作系统&#xff08;如 GNU/Linux&#xff09;的组成&#xff0c;需要明确 内核&#xff08;Kernel&#xff09; 和 GNU 工具链 各自的功能&#xff0c;以及它们如何协作构成完整的操作系统。以下是详细分析&#xff1a;1. 内核&#xff08;Kernel&#xff09;的功能 内…

文件包含学习总结

目录 漏洞简介 漏洞原理 漏洞分类 漏洞防御 漏洞简介 程序开发人员一般会把重复使用的函数写到单个文件中&#xff0c;需要使用某个函数时直接调用此文件&#xff0c;而无需再次编写&#xff0c;这种文件调用的过程一般被称为文件包含。程序开发人员一般希望代码更灵活&…

TQZC706开发板教程:创建PCIE项目

本例程基于zc706开发板&#xff0c;使用xdma核创建PCIE项目&#xff0c;最终实现插入主机可识别出Xilinx设备。在vivado中创建一个空的706项目。创建完成后添加IP核-->搜索xdma-->双击打开配置。添加XDMA核如下所示basic配置peic id中设置设备号等信息&#xff0c;这里保…

科技赋能景区生.态,负氧离子气象监测站筑牢清新防线

负氧离子气象监测站&#xff0c;如同景区空气质量的坚固防线&#xff0c;默默守护着每一寸土地的清新。​它以精准的监测能力为防线基石。借助 “吸入式电容收集法”&#xff0c;能敏锐捕捉空气中负氧离子的踪迹&#xff0c;精准测量其浓度&#xff0c;同时将温度、湿度、PM2.5…

AMD官网下载失败,不让账户登录下载

别使用163邮箱 使用QQ邮箱&#xff0c;然后用GPT生成一个外国&#xff0c;比如日本的地区信息填上去就可以下载了

Elasticsearch-8.17.0 centos7安装

下载链接 https://www.elastic.co/downloads/past-releases/elasticsearch-8-17-0 https://www.elastic.co/downloads/past-releases/logstash-8-17-0 https://www.elastic.co/cn/downloads/past-releases/kibana-8-17-0https://artifacts.elastic.co/downloads/elasticsearch/…

windows下SAS9.4软件下载与安装教程

SAS 9.4是SAS公司推出的一款功能强大的统计分析软件&#xff0c;广泛应用于数据分析、商业智能、预测分析、数据挖掘及统计建模等多个领域。数据处理与管理能力&#xff1a;SAS 9.4支持多种数据格式的导入导出&#xff0c;包括JSON、XML等&#xff0c;便于处理来自Web和API的数…

MyBatis-Plus极速开发指南

MyBatis-Plus简介MyBatis-Plus 是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;简化开发&#xff0c;提高效率。它提供了以下主要特性&#xff1a;无侵入&#xff1a;只做增强不做改变&#xff0c;引入它不会对现有工程产生影响强大的 …

Django接口自动化平台实现(五)

8. 测试用例执行 预期效果如下&#xff1a;用例执行逻辑如下&#xff1a;前端提交用例 id 列表到后台&#xff0c;后台获取每一条用例的信息&#xff1b;后台获取域名信息、用例 id 列表&#xff1b;对用例的请求数据进行变量的参数化、函数化等预处理操作&#xff1b;根据先后…

一个没有手动加分号引发的bug

最近因为分号的疏忽&#xff0c;导致出现了一个bug&#xff0c;记录下来&#xff0c;分享给大家。 1、一个示例 给你下面这一段代码&#xff0c;你根据经验判断一下运营结果 let [a,b] [a,b] let [x,y] [1,2] if(x < y){[x,y] [y,x][a,b] [b,a] }按照一般的理解&#xf…