小红的排列构造(dp优化)

题目描述

小红拿到了一个长度为n的数组a,她希望你构造两个排列p和q,满足对于i∈[1,n],ai∈[1,n]pi或qi二选一。你能帮帮她吗?定义排列是一个长度为n的数组,其中1到n每个元素恰好出现1次。

输入描述:第一行输入一个正整数n,代表两个数组的长度。 第二行输入n个正整数ai​。1≤n≤10^5,1≤ai≤n。

输出描述:如果无解,请输出-1。 否则第一行输出n个正整数pi,第二行输出n个正整数qi,代表小红构造的两个排列。有多解时输出任意即可。

输入

3

2 3 2

输出

2 3 1
1 3 2

输入

4
1 1 1 1
输出:-1
#include<bits/stdc++.h>
#include<iostream>
#include<vector>
using namespace std;
const long long N=1e7+5;
inline int read(){//内联函数效率更高int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48),c=getchar();}return x*f;
}
inline void print(int x)
{if(x<0)putchar('-'),x=-x;if(x>9)print(x/10);putchar(x%10+'0');return;}
int n,k=0,z=0;
vector<int> tr(N),arr(N),p1(N),p2(N);//向量比数组更加灵活与方便
int main(){cin>>n;for(int i=1;i<=n;i++){arr[i]=read();if(tr[arr[i]]==2){cout<<"-1";return 0;}++tr[arr[i]];}for(int i=1;i<=n;i++){if(tr[arr[i]]==1){p1[i]=arr[i];p2[i]=arr[i];}if(tr[arr[i]]==3){while(tr[++k]!=0);p1[i]=k;p2[i]=arr[i];}if(tr[arr[i]]==2){tr[arr[i]]=3;p1[i]=arr[i];while(tr[++z]!=0);p2[i]=z;}}	for(int i=1;i<=n;i++)print(p1[i]),putchar(32);putchar(10);for(int i=1;i<=n;i++)print(p2[i]),putchar(32);putchar(10);	return 0;
}

这个虽然通过运行但是时间和内存都耗费很大

#include<bits/stdc++.h>
#define ll long long
const ll N=1e5+5;
#define _for(i,a,b) for(int(i)=(a);(i)<(b);(i)++)
using namespace std;
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48),ch=getchar();}return x*f;
}
void write(int x)
{if(x<0)putchar('-'),x=-x;if(x>9) write(x/10);putchar(x%10+'0');return;}
int n,k=0,z=0;
vector<int> tr(N),arr(N),p1(N),p2(N);
int main(){cin>>n;for(int i=1;i<=n;i++){arr[i]=read();if(tr[arr[i]]==2){cout<<"-1";return 0;}++tr[arr[i]];}for(int i=1;i<=n;i++){if(tr[arr[i]]==1){p1[i]=arr[i];p2[i]=arr[i];}if(tr[arr[i]]==3){while(tr[++k]!=0);p1[i]=k;p2[i]=arr[i];}if(tr[arr[i]]==2){tr[arr[i]]=3;p1[i]=arr[i];while(tr[++z]!=0);p2[i]=z;}}	for(int i=1;i<=n;i++)write(p1[i]),putchar(32);putchar(10);for(int i=1;i<=n;i++)write(p2[i]),putchar(32);putchar(10);		return 0;
}

原因如下:

第一次定义的数组范围过大,造成无用空间过多的浪费;

#define _for(i,a,b) for(int(i)=(a);(i)<(b);(i)++)类似于定义了一个模板,效率更高。

  • n 用于存储整数的数量;
  • k 和 z 用于临时存储新的整数值;
  • tr 数组记录每个整数出现的次数;
  • arr 数组存储原始整数序列;
  • p1 和 p2 数组分别存储变换后的两个序列;
  • 读取整数序列,统计每个整数出现的次数并存储在tr数组中;
  • 遍历arr数组,根据tr[arr[i]]的值决定如何填充p1p2
  • 如果某个整数出现了4次,先将其置为3次,然后分别将它放入p1和一个新的未出现过的整数放入p2
  • 如果某个整数出现了偶数次但不是4次,将其中一个放入p1,然后找一个未出现过的整数放入p2
  • 如果某个整数出现了奇数次,直接放入两个新数组;
  • 最后输出处理后的两个序列

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

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

相关文章

Linux平台Alsa库移植

嵌入式Linux平台Alsa库移植 1. Alsa-lib2. Alsa-utilsAplay播放避坑 1. Alsa-lib alsa-lib下载地址&#xff1a;https://www.alsa-project.org/files/pub/lib/ 这里使用的版本是alsa-lib-1.0.29 下载完成并解压&#xff0c;进入alsa-lib-1.0.29目录 编译配置如下&#xff1a; …

关于selenium各种操作语句(方便查询便携版)

定位方法 #功能from selenium import webdriver#载入驱动 from selenium.webdriver.common.by import By #新版载入by,旧版的find_element_by_id语句一般会被划掉&#xff0c;然后给你提示说语句已淘汰&#xff0c;不过目前还是可以运行&#xff0c;只是代码不好看。#启动驱动的…

解释RocketMQ的“消息顺序”特性

RocketMQ的“消息顺序”特性指的是它能按照发送方的预期&#xff0c;保持消息在生产和消费过程中的顺序一致性。这一特性对于某些特定的应用场景至关重要&#xff0c;比如金融交易、订单处理等&#xff0c;在这些场景中&#xff0c;消息的顺序性对于业务逻辑的正确性有着决定性…

解析OceanBase v4.2 Oracle 语法兼容之 LOCK TABLE

背景 在OceanBase V4.1及之前的版本中&#xff0c;尽管已经为Oracle租户兼容了LOCK TABLE相关的语法&#xff0c;包括单表锁定操作&#xff0c;和WAIT N&#xff0c; NOWAIT 关键字。但使用时还存在一些限制。例如&#xff1a;LOCK TABLE只能针对单表进行锁定&#xff0c;并不…

Leetcode287_寻找重复数

1.leetcode原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 2.题目描述 给定一个包含 n 1 个整数的数组 nums &#xff0c;其数字都在 [1, n] 范围内&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一个重复的整数。 假设 nums 只有 一个重复…

URL GET +号后台接收成空格

问题&#xff1a;参数spdmwhbs001 其中包含URL特殊符号 如果用GET请求方式不做任何不处理那么浏览器自动将转为%20 请求链接为 details?spdmwhbs%20001&limitKcysType1 后台接收到的参数为 whbs 001 &#xff0c;自动将号转成空格了。 尝试解决&#xff08;失败&#…

Redis中的事务(二)

事务 事务的实现 执行事务 当一个处于事务状态的客户端向服务器发送EXEC命令时&#xff0c;这个EXEC命令将立即被服务器执行&#xff0c;服务器会遍历这个客户端的事务队列&#xff0c;执行队列中保存的所有命令&#xff0c;最后将执行命令所得的结果全部返回给客户端。 例…

kubernets 节点数量限制修改

kubelet节点pod数量限制 在 Kubernetes 中&#xff0c;kubelet 的 --max-pods 参数默认值是 110。这意味着每个节点上最多可以运行 110 个 Pod。这个默认值是为了在大多数情况下提供一个合理的默认限制&#xff0c;以避免节点资源被过度占用。 如果需要修改默认的 --max-pods…

STM32学习和实践笔记(17):STM32外部中断(EXTI)的整体介绍

1.外部中断介绍 1.1 EXTI简介 STM32F10x外部中断/事件控制器&#xff08;EXTI&#xff09;包含多达 20 个用于产生事件/中断请求的边沿检测器。&#xff08;事件与中断的区别&#xff0c;可参看STM32---中断与事件的区别_中断和事件的区别-CSDN博客&#xff09; 具体有哪些&a…

C语言结课实战项目_贪吃蛇小游戏

目录 最终实现效果&#xff1a; 实现基本的功能&#xff1a; 根据游戏进程解释代码&#xff1a; 游戏初始化&#xff1a; 首先进入游戏&#xff0c;我们应该将窗口名称改为 “贪吃蛇” 并将光标隐藏掉。再在中间打印游戏信息。 之后我们要把地图打印出来&#xff1a; 然后…

Redis(三) 事务与发布订阅

结合前两期 Redis(一) Redis简介(Redis(一) Redis简介-CSDN博客) Redis(二) 可编程性(Redis(二) 可编程性-CSDN博客) 目录 事务在 Redis 中的运作方式 用法 事务中的错误 回滚 放弃命令队列 使用检查和设置的乐观锁定 WATCH解释 使用 WATCH 实现 ZPOP Redis 发布/订…

Python的pytest框架(4)--参数化测试

在 pytest 测试框架中&#xff0c;参数化测试&#xff08;Parametrized Testing&#xff09;意味着将一个测试用例设计为能够接受不同输入数据&#xff08;参数&#xff09;并分别执行&#xff0c;以验证被测试代码在面对多种情况时的行为是否符合预期。参数化测试的核心理念是…

DAY28| 93. 复原IP地址 ,79.子集 ,90.子集II

文章目录 93.复原IP地址78.子集90.子集II 93.复原IP地址 文字讲解&#xff1a;复原IP地址 视频讲解&#xff1a;复原IP地址 **状态&#xff1a;**此题调试了几次ok&#xff0c;与昨天的分割回文子串相比&#xff0c;就是在判断终止条件处需要处理&#xff1b; 思路&#xff1a;…

设计模式- 单例模式(Singleton)结构|实现方式|优缺点|场景

目录 设计模式&#xff08;分类&#xff09; 设计模式&#xff08;六大原则&#xff09; 创建型 工厂方法 抽象工厂模式 单例模式 建造者模式 单例模式&#xff08;Singleton Pattern&#xff09;是一种创建型设计模式&#xff0c;其…

rust : condvar中一对一和多对一模式初探

condvar是不经常碰到的&#xff0c;但其实在tokio之类库中&#xff0c;还是非常核心的作用。 想进一步体会condvar的使用&#xff0c;还是从场景出发。 一、一个通知发送者&#xff0c;一个接收者 假定一个员工收到一个任务&#xff0c;就是模拟是一个时间片&#xff0c;到时…

【Qt】设置QT标准对话框为中文字体

设置QT标准对话框为中文字体 一、问题二、解决方法1、找到Qt内置的翻译文件 qt_zh_CN.qm2、在代码中加载该文件 一、问题 在Qt中我们使用的标准对话框都是英文&#xff0c;例如下面的 字体选择对话框&#xff0c;但是实际中我们需要构建的是中文对话框。 所以我们需要使用Qt官…

19篇 vue3进阶

一 基础特性 1. **Composition API**&#xff1a;引入了组合式 API&#xff0c;允许以函数的方式组织组件逻辑。 2. **响应式系统**&#xff1a;使用 Proxy 作为其响应式系统的基础&#xff0c;提供更精确的依赖追踪。 3. **模板语法**&#xff1a;保留了 Vue 2 的模板语法…

MySQL InnoDB事务隔离级别与锁机制深入解析

引言 在当今的数据库系统中&#xff0c;事务管理是确保数据一致性和完整性的关键。事务是数据库操作的基本单元&#xff0c;它将一系列的数据库操作组合成一个逻辑工作单元&#xff0c;要么全部成功执行&#xff0c;要么全部失败回滚&#xff0c;这就是所谓的ACID属性&#xf…

js自动缩放页面,html自动缩放页面,大屏自动缩放页面,数字看板自动缩放页面,大数据看板自动缩放页面

js自动缩放页面&#xff0c;html自动缩放页面&#xff0c;大屏自动缩放页面&#xff0c;数字看板自动缩放页面&#xff0c;大数据看板自动缩放页面 由纯JS实现 html代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"…

vue 注册自定义指令,对输入框输入内容过滤(区分中英文)

注册vue全局指令 对el-input输入框进行最大长度过滤&#xff08;区分中英文&#xff09; 过滤空格 注册全局指令 main.js /*** 输入框最长输入限制* param {*} e 文本内容* param {number} maxlength 最大字符长度* param {boolean} trim 是否过滤空格* returns {string} 最…