P1088 [NOIP2004 普及组] 火星人(全排列)

2023-11-08

在这里插入图片描述
题目链接: 火星人

思路分析: 分析题目题意得到,这个题目关于全排列的问题,题目输入N,M分别代表对1——N进行全排列,火星人给出的大数就是1——N全排列的一种情况,对全排列的所有情况进行编号,例如下图:

例如上图N=3,假设M=2,给出一种全排列序列2,1,3那么最后输出应该是3,1,2因为图中2,1,3是全排列的第3种情况加上M得到第五种情况3,1,2。所以分析样例可以得到我们只需要根据题目给出的序列,开始全排列M次的到最后的结果就是题目所要求的.题目两种解法
解法1.使用c++中的全排列函数next_purmutation(),执行一次就会得到一种情况,只需要输入序列循环m次执行得到结果

#include<bits/stdc++.h>
using namespace std;
int n,m;
int sum=0;
int ans[10010];//存储答案

int main(){
	cin>>n>>m;
	for(int i=0;i<n;i++){
		cin>>ans[i];
	}
	for(int i=1;i<=m;i++){
		next_permutation(ans,ans+n);	
	}
	for(int i=0;i<n;i++){
		cout<<ans[i]<<" ";
	}
	
}

解法2,自定义dfs()全排列函数,从给出的序列开始递归搜索

#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[10005];//初始化的输入序列
int ans[10005];//保存结果答案
bool vis[10005];//记录是否已经访问过
int cnt=0;//标记是否是第一个初始化序列,cnt!=0说明已经将初始化输入的序列赋值给了ans数组
void dfs(int x){
	//表示已经得到了该序列,不需要继续递归搜索
	if(cnt>m){
		return;
	}
	if(x>n){
		cnt++;//统计序号
		//打印结果
		if(cnt==m+1){
			for(int i=1;i<=n;i++){
					cout<<ans[i]<<" ";
			}
			cout<<endl;
		}
		
		return;
	}
	for(int i=1;i<=n;i++){
		//初始化状态
		if(!cnt){
			//表示第一个数访问
			i=a[x];
		}
		// i 这个数没有访问
		if(!vis[i]){
			//访问这个数字
			vis[i]=true;
			//并将这个数字存储
			ans[x]=i;
			//接着访问接下来的数
			dfs(x+1);
			//回溯
			vis[i]=false;
		}
	}
}
int main(){
	//输入几根手指,也就是对几进行全排列
	//m表示在初始化输入元素的基础上加上多少
	cin>>n>>m;
	//输入初始数输入数组
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	dfs(1);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

P1088 [NOIP2004 普及组] 火星人(全排列) 的相关文章

  • 搭建Hyperledger Fabric环境 的详细步骤,超级详细

    本教程是跟着 某硅谷 三年前的视频一点点实现的 但是 跟着教程走 会出现很多视频里面没有出现过的问题 本文着重讲解搭建过程碰到的问题及解决方案 一 环境准备 先更新一下 sudo apt get update 1 安装docker 见我之前

随机推荐

  • 使用fromelf把axf文件转换成elf格式

    FROMELF用法 命令格式 fromelf options input file fromelf h即可打印出帮助信息 Product MDK Plus 5 29 Component ARM Compiler 5 06 update 6
  • 时序预测

    时序预测 Python实现CNN LSTM卷积长短期记忆神经网络时间序列预测 目录 时序预测 Python实现CNN LSTM卷积长短期记忆神经网络时间序列预测 基本介绍 程序设计 参考资料 基本介绍 时序预测 Python实现CNN LS
  • Visual Studio中使用GitHub

    Visual Studio中直接使用Github能够非常方便的同步 拉取git中的项目 还可以多人同时进行版本控制 小组合作的利器 也不需要拷贝代码了 具体使用方法 第一步 在Visual Studio中安装GitHub Extension
  • web系统数据字典加载处理,冷数据处理

    web系统加载数据字典或者类似于工程信息 项目信息这种 基本不会写的数据 在使用时虽然可以频繁读取数据库 但考虑到优化问题 还是希望通过缓存处理这种冷数据 数据库二级缓存机制会导致在写数据时 不能立即查询到已修改数据 在做类似与ERP这种表
  • mybatis-generator自动生成的类中含有XXXwithBLOBs,去掉的方法

    当数据库中的字段有text类型时 mybatis会为这种类型单独创建一个类来映射这两个字段 生成的主要po类中是没有这两个字段的 自动生成的xxxWithBLOBs类会继承生成的主要po类 public class ProductWithB
  • 束缚游戏 html,束缚游戏

    束缚 描述的是一个锁链束缚的眼镜男 在游戏中会遇到各种障碍 探索一个普通居家男人的心灵利用铁球来通过这些障碍的横向平台解谜游戏 游戏简介 束缚 是一款卷轴平台益智游戏 主角是一个被锁链束缚的眼镜男 他可以利用铁球通过各种障碍 游戏的宗旨是探
  • linux与freertos程序兼容,从freeRTOS运行应用程序

    FreeRTOS 以及大多数RTOS 不像通用操作系统 GPOS 那样工作 它们通常不是为了动态加载和执行任意用户提供的应用程序而设计的 在大多数情况下 您使用RTOS是因为您需要硬实时响应 并且执行第三方代码可能会对此造成影响 大多数RT
  • vivado AXI_interconnector ID信号的一些总结

    很久没有写东西了 最近尽力了很多生活上的事情 最终也算圆满结局 言归正传 主要是以AXI4为背景介绍4组ID信号 以及其计算方式 对照vivado PG059以及PG247 见解都是基于个人所学 会有偏差还望谅解 AXI4中去掉了WID 所
  • 基于iframe的HTTP长连接实现

    关于什么是http长连接我不废吐沫了 有专业的解释 http www ibm com developerworks cn web wa lo comet 你可以去看看我们介绍一下在struts下的实现首先写一个test jsp 写一些片段
  • 【100天精通python】Day30:使用python操作数据库_数据库基础入门

    专栏导读 专栏订阅地址 https blog csdn net qq 35831906 category 12375510 html 1 数据库基础知识介绍 1 1 什么是数据库 数据库是一个结构化存储和组织数据的集合 它可以被有效地访问
  • android 网络自动同步时间慢问题

    问题描述 今天测试提了一个网络同步时间慢的bug 网络同步时间原理参考 https blog csdn net yin1031468524 article details 65447849 核心代码在NetworkTimeUpdateSer
  • 【遗传算法】【处理图像类问题】

    文章目录 一 前言 二 问题描述 三 算法介绍 四 其他知识点 Reference 一 前言 近期感兴趣的算法 以前没这么好奇过一个算法 时间没想象的焦虑 认真做一些事情 算法入门篇 二 问题描述 从前 一群扇贝在海岸边悠哉游哉地生活着 它
  • ThinkPHP3.2自带的七牛云配置使用

    利用七牛云私有空间存储文件 第一步 注册七牛云 创建空间 将空间设为私有 需要记下的东西 accessKey secrectKey domain bucket 第二步配置ThinkPHP 在config php添加 UPLOAD SITEI
  • STM32 FreeRTOS 内存问题

    1 STM32L151C8T6 内存 64Kb 的Flash 代码就是烧录在这里面的 16Kb 的RAM 程序跑起来之后的内存 相当于我们高考时发的草稿纸 直接影响程序的运行速度 可以用STM32 CubeMx 软件直接下载数据手册data
  • Calendar 中getActualMaximumd 功能

    String str new SimpleDateFormat yyyy MM dd HH mm ss SSS format new Date Calendar calendar Calendar getInstance Locale CH
  • 使用pytorch训练DCGAN----贰(代码解析)

    使用pytorch训练DCGAN 代码解析 上一篇 使用pytorch训练DCGAN 壹 这里我使用的代码时pytorch官方提供的源码 然后根据DCGAN原论文分板块分析 板块一 导包 from future import print f
  • javaWeb图书管理系统

    javaWeb图书管理系统 1 项目简单介绍 a 项目用到的技术 IDE Intellij IDEA 语言 java html ajax js 数据库 Mysql 数据库可视化 navicat web服务器 Tomcat 框架 mybati
  • C++使用当multiset插入相同的数时 新插入的数在已有数的左边还是右边呢

    答案 在multiset中 元素按照特定的顺序进行排序并存储 当向multiset插入相同的数时 新插入的数将被放置在已有数的右边 multiset允许存储重复的元素 并且保持了元素的顺序 因此 如果已经存在相同的数 新插入的数将被放置在它
  • c++在线编辑器

    c 在线编辑器 Compiler Explorer Coliru Ideone 乱糟糟的不推荐 C Shell CodingGround 可用来美化代码 慢的很 Judge0 IDE Compiler Explorer https godb
  • P1088 [NOIP2004 普及组] 火星人(全排列)

    题目链接 火星人 思路分析 分析题目题意得到 这个题目关于全排列的问题 题目输入N M分别代表对1 N进行全排列 火星人给出的大数就是1 N全排列的一种情况 对全排列的所有情况进行编号 例如下图 例如上图N 3 假设M 2 给出一种全排列序