121. 小红的区间翻转(卡码网周赛第二十五期(23年B站笔试真题))

题目链接
121. 小红的区间翻转(卡码网周赛第二十五期(23年B站笔试真题))

题目描述

小红拿到了两个长度为 n 的数组 a 和 b,她仅可以执行一次以下翻转操作:选择a数组中的一个区间[i, j],(i != j),将它们翻转。例如,对于 a = [2,3,4,1,5,6],小红可以选择左闭右闭区间[2,4],数组 a 则变成[2,3,5,1,4,6]。
小红希望操作后 a 数组和 b 数组完全相同。请你告诉小红有多少种操作的方案数。
初始 a 数组和 b 数组必定不相同。

输入

第一行输入一个正整数 n,代表数组的长度;
第二行输入 n 个正整数 ai;
第三行输入 n 个正整数 bi。

输出

选择区间的方案数。

样例1输入

4
1 2 3 1
1 3 2 1

样例1输出

2

样例2输入

4
1 1 1 1
1 1 1 1

样例2输出

6

样例3输入

10
19 2 13 71 14 14 71 40 16 23
19 2 13 71 14 14 71 40 16 23

样例3输出

2

提示

数据范围
1 ≤ n, ai ,bi ≤ 5000
在示例1中:
将 1 2 3 1 中的 2 3 进行翻转,得到 1 3 2 1。
将 1 2 3 1 整个进行翻转,得到 1 3 2 1。
所以最终结果是 2。

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

题解1(C++版本)

// 区间dp
#include<bits/stdc++.h>
using namespace std;
const int N = 5010;int n, a[N], b[N], ans;
bool dp1[N][N]; // dp1[i][j]为1表示将数组a的区间[i,j]进行翻转后,使得数组a和数组b这段区间相同
bool dp2[N][N]; // dp2[i][j]为1表示将数组a的区间[i,j]与数组b这段区间相同
int main(){scanf("%d", &n);for(int i = 1; i <= n; i++) scanf("%d", &a[i]);for(int i = 1; i <= n; i++) scanf("%d", &b[i]);for(int i = 1; i <= n; i++) dp2[i][i] = dp1[i][i] = true;for(int len = 2; len <= n; len++){ // 枚举区间长度for(int i = 1; i + len - 1 <= n; i++){ // 枚举区间左端点int j = i + len - 1; // 枚举区间右端点if((a[i] == b[j]) && (a[j] == b[i])){ // 将数组a的区间[i,j]进行翻转if(i + 1 < j) dp1[i][j] = dp1[i + 1][j - 1];else dp1[i][j] = true; // i和j相邻}if((a[i] == b[i]) && (a[j] == b[j])){ // 不将数组a的区间[i,j]进行翻转if(i + 1 < j) dp2[i][j] = dp2[i + 1][j - 1];else dp2[i][j] = true; // i和j相邻}}}for(int len = 2; len <= n; len++){for(int i = 1; i + len - 1 <= n; i++){int j = i + len - 1;bool f1 = true, f3 = true;if(i > 1) f1 = dp2[1][i - 1];if(j < n) f3 = dp2[j + 1][n];if(f1 && dp1[i][j] && f3) {ans++;}}}printf("%d\n", ans);return 0;
}

题解2(C++版本)

// 字符串哈希
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long uLL;const int N = 5005;
const uLL base = 2333;uLL pw[N] = {1}, hs1[N], hs2[N], hs; // hs1表示正向求哈希,hs2表示反向求哈希, hs表示数组b的哈希
int n;
uLL a[N], b[N];
int main(){scanf("%d", &n);for(int i = 1; i <= n; i++){pw[i] = pw[i - 1] * base;}for(int i = 1; i <= n; i++) scanf("%u", &a[i]);for(int i = 1; i <= n; i++) scanf("%u", &b[i]), hs = hs * base + b[i];for(int i = 1; i <= n; i++) {hs1[i] = hs1[i - 1] * base + a[i];}for(int i = n ;i > 0; i--){hs2[i] = hs2[i + 1]*base + a[i];}//for(int i = 1; i <= n; i++) printf("%u ", hs1[i]);//printf("\n");// for(int i = 1; i <= n; i++) printf("%u ", hs2[i]);// printf("\n");int ans = 0;for(int i = 1; i < n; i++){for(int j = i + 1; j <= n; j++){uLL sum1 = hs1[i - 1]*pw[n - i + 1];uLL sum2 = (hs2[i] - hs2[j + 1]*pw[j - i + 1])*pw[n -j];uLL sum3 = (hs1[n] - hs1[j]*pw[n - j]);//printf("i = %d j = %d ", i, j);//printf("%u %u %u, %u \n", sum1, sum2, sum3, sum1 + sum2 + sum3);if(sum1 + sum2 + sum3 == hs) ans++;}}printf("%d\n", ans);return 0;
}

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

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

相关文章

顺序表算法 - 移除元素

. - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/remove-element/description/思路: 代码: // numsSize表示数组的长度 …

网络安全——防御课实验二

在实验一的基础上&#xff0c;完成7-11题 拓扑图 7、办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换) 首先&#xff0c;按照之前的操作&#xff0c;创建新的安全区&#xff08;电信和移动&#xff09;分别表示两个外网…

Readiris PDF Corporate / Business v23 解锁版安装教程 (PDF管理软件)

前言 Readiris PDF Corporate / Business 是一款高性能的 OCR&#xff08;光学字符识别&#xff09;软件&#xff0c;能够帮助用户将纸质文档、PDF 文件或图像文件转换为可编辑和可搜索的电子文本。该软件提供专业级的功能和特性&#xff0c;非常适合企业和商业使用。使用 Rea…

基于lstm的股票Volume预测

LSTM&#xff08;Long Short-Term Memory&#xff09;神经网络模型是一种特殊的循环神经网络&#xff08;RNN&#xff09;&#xff0c;它在处理长期依赖关系方面表现出色&#xff0c;尤其适用于时间序列预测、自然语言处理&#xff08;NLP&#xff09;和语音识别等领域。以下是…

LabVIEW人工模拟肺控制系统开发

开发了一种创新的主被动一体式人工模拟肺模型&#xff0c;通过LabVIEW开发的上位机软件&#xff0c;实现了步进电机驱动系统的精确控制和多种呼吸模式的模拟。该系统不仅能够在主动呼吸模式下精确模拟快速呼吸、平静呼吸和深度呼吸&#xff0c;还能在被动模式下通过PID控制实现…

C++20中的consteval说明符

在C20中&#xff0c;立即函数(immediate function)是指每次调用该函数都会直接或间接产生编译时常量表达式(constant expression)的函数。这些函数在其返回类型前使用consteval关键字进行声明。 立即函数是constexpr函数&#xff0c;具体情况取决于其要求。与constexpr相同&…

神经网络以及简单的神经网络模型实现

神经网络基本概念&#xff1a; 神经元&#xff08;Neuron&#xff09;&#xff1a; 神经网络的基本单元&#xff0c;接收输入&#xff0c;应用权重并通过激活函数生成输出。 层&#xff08;Layer&#xff09;&#xff1a; 神经网络由多层神经元组成。常见的层包括输入层、隐藏层…

springboot健身房预约管理系统-计算机毕业设计源码75535

目录 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.1.1经济可行性 2.1.2技术可行性 2.1.3操作可行性 2.2 系统流程分析 2.2.1系统开发流程 2.2.2 用户登录流程 2.2.3 系统操作流程 2.2.4 添加信息流程 2.2.5 …

Gradle学习-6 APT 实现一个路由跳转框架(APT、发布maven仓库)

Annotation 注解&#xff1a;注解是元数据&#xff0c;即描述数据的数据APT&#xff08;Annotation Processing Tool&#xff09;注解处理器 APT工作原理 Demo介绍 APT项目地址 使用APT maven仓库地址 &#xff08;1&#xff09;项目配置 Gradle 8.2AGP 8.2.0Java jdk 17…

调整网络安全策略以适应不断升级的威胁形势

关键网络安全统计数据和趋势 当今数字时代网络安全的重要性

Python爬虫速成之路(2):爬天气情况

hello hello~ &#xff0c;这里是绝命Coding——老白~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#xff1a;绝命Coding-CSDN博客 &a…

nginx的四层负载均衡实战

目录 1 环境准备 1.1 mysql 部署 1.2 nginx 部署 1.3 关闭防火墙和selinux 2 nginx配置 2.1 修改nginx主配置文件 2.2 创建stream配置文件 2.3 重启nginx 3 测试四层代理是否轮循成功 3.1 远程链接通过代理服务器访问 3.2 动图演示 4 四层反向代理算法介绍 4.1 轮询&#xff0…

docker 上传镜像到hub仓库

要将 Docker 镜像上传到 Docker Hub&#xff0c;你需要按照以下步骤操作&#xff1a; 登录 Docker Hub 首先&#xff0c;你需要登录到 Docker Hub。打开终端并运行以下命令&#xff1a;docker login系统会提示你输入 Docker Hub 的用户名和密码。 如果密码忘记可以token登录&a…

MySQL复合查询(重点)

前面我们讲解的mysql表的查询都是对一张表进行查询&#xff0c;在实际开发中这远远不够。 基本查询回顾 查询工资高于500或岗位为MANAGER的雇员&#xff0c;同时还要满足他们的姓名首字母为大写的J mysql> select * from emp where (sal>500 or jobMANAGER) and ename l…

【数据结构初阶】详解 环形链表:链表的带环问题(判断是否带环、环形链表的入口点)

文章目录 一、链表的带环问题1.1、判断链表是否带环&#xff08;力扣 141.环形链表&#xff09;1.2 、证明&#xff1a;为什么带环时快慢指针一定相遇&#xff1f;1.3、证明&#xff1a;当slow走1步&#xff0c;fast可走3/4/5步&#xff08;fast的速度是slow的3/4/5倍&#xff…

Open3d入门 一文读懂三维点云

三维点云技术的发展始于20世纪60年代&#xff0c;随着激光雷达和三维扫描技术的进步&#xff0c;在建筑、考古、地理信息系统和制造等领域得到了广泛应用。20世纪90年代&#xff0c;随着计算机处理能力的提升&#xff0c;点云数据的采集和处理变得更加高效&#xff0c;推动了自…

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(二)-支持高分辨率视频直播应用

引言 本文是3GPP TR 22.829 V17.1.0技术报告&#xff0c;专注于无人机&#xff08;UAV&#xff09;在3GPP系统中的增强支持。文章提出了多个无人机应用场景&#xff0c;分析了相应的能力要求&#xff0c;并建议了新的服务级别要求和关键性能指标&#xff08;KPIs&#xff09;。…

【调试笔记-20240713-Windows-Tauri 多个HTML页面支持】

调试笔记-系列文章目录 调试笔记-20240713-Windows-Tauri 多个HTML页面支持 文章目录 调试笔记-系列文章目录调试笔记-20240713-Windows-Tauri 多个HTML页面支持 前言一、调试环境操作系统&#xff1a;Windows 10 专业版调试环境调试目标 二、调试步骤搜索相似问题 三、应用场…

FPGA入门-自用

写代码&#xff0c;并将引脚对应到板子相应的引脚上 下载程序到板子上 遇到错误了&#xff0c;不按想的来的了&#xff0c;进行仿真 查看网表图查看问题所在 简化了一些步骤&#xff1a;未使用引脚的设置&#xff0c;电压设置&#xff1b; 通过画网表结构图来构成电路 时钟 …

SpringBoot+Vue实现简单的文件上传(txt篇)

SpringBootVue实现简单的文件上传 1 环境 SpringBoot 3.2.1&#xff0c;Vue 2&#xff0c;ElementUI 2 页面 3 效果&#xff1a;只能上传txt文件且大小限制为2M&#xff0c;选择文件后自动上传。 4 前端代码 <template><div class"container"><el-…