【离散数学上机】T235,T236

news2025/2/14 5:20:56

T235题目:输入集合A和B,输出A到B上的所有单射函数。

问题描述

给定非空数字集合A和B,求出集合A到集合B上的所有单射函数。

输入格式

第一行输入m和n(空格间隔),分别为集合A和集合B中的元素个数;

第二行输入非空数字集合A,每个元素之间用空格间隔;

第三行输入非空数字集合B,每个元素之间用空格间隔;

输出格式

输出每一行为集合A到集合B的一个构成单射函数的二元关系,按二元关系的基数大小从小到大输出所有二元关系,相同基数的二元关系按序偶中元素的字典序排列。

样例输入

2 2

1 2

3 4

样例输出

{<1,3>,<2,4>}

{<1,4>,<2,3>}

在T234基础上,保证加入q集合中元素不重复即可,前者链接见下:

【xdoj-离散线上练习H】T234(C++)-CSDN博客

#include<bits/stdc++.h>
using namespace std;

int main()
{
	//预处理:利用优先队列将集合中元素从小到大放进数组A,B中
	int m, n, cur;
	cin>>m>>n;
	priority_queue<int>pq;	
	vector<int>A(m);
	vector<int>B(n);
	for(int i=0; i<m; i++) 
	{
		cin>>cur; pq.push(cur);
	}
	for(int i=1; i<=m; i++) 
	{
		A[m-i] = pq.top(); pq.pop();		
	}
	for(int i=0; i<n; i++) 
	{
		cin>>cur; pq.push(cur);
	}
	for(int i=1; i<=n; i++) 
	{
		B[n-i] = pq.top(); pq.pop();		
	}
	
	//观察输出样例:每行输出均有A中全部元素,B对应元素每行只有一处变化
	vector<int>q(m);//q[i]携带了当前映射关系中A[i]对应的集合B中元素
	//为什么用递归:因为A中元素数量不确定,事实上,如果用for循环嵌套,那么for循环的数量为 m,这是不能在确定的代码中实现的
	auto dfs = [&](auto& dfs, int cnt) -> void
	{
		if(cnt == m)//递归终止条件
		{
			cout<<"{";
			for(int i=0; i<m; i++)
			{
				cout<<"<"<<A[i]<<","<<q[i]<<">";				
				if(i == m-1) cout<<"}"<<endl;
				else cout<<",";
			}
			return;			
		}
		else{//继续递归
			for(int i=0; i<n; i++)
			{
				//保证q中的元素不重复
				int k=0;
				for( ; k<cnt; k++)
				{
					if(q[k] == B[i]) break;
				}	
				if(k == cnt)				
				{
					q[cnt] = B[i];
					dfs(dfs, cnt+1);
				}			
			}			
			return;
		}
	};
	dfs(dfs, 0);
	return 0;	
}

T236题目:输入集合A和B,输出A到B上的所有满射函数。

只需将dfs函数替换成如下形式

auto dfs = [&](auto& dfs, int cnt) -> void
	{
		if(cnt == m)//递归终止条件
		{
			set<int>st;
			for(int i=0; i<m; i++)
			{
				st.insert(q[i]);
			}
			if(st.size() == n)
			{
				cout<<"{";
				for(int i=0; i<m; i++)
				{
					cout<<"<"<<A[i]<<","<<q[i]<<">";				
					if(i == m-1) cout<<"}"<<endl;
					else cout<<",";
				}
			}
			
			return;			
		}
		else{//继续递归
			for(int i=0; i<n; i++)
			{
				q[cnt] = B[i];
				dfs(dfs, cnt+1);						
			}			
			return;
		}
	};

T237题目:输入集合A和B,输出A到B上的所有双射函数。

将dfs换成这个就成

auto dfs = [&](auto& dfs, int cnt) -> void
	{
		if(cnt == m)//递归终止条件
		{
			set<int>st;
			for(int i=0; i<m; i++)
			{
				st.insert(q[i]);
			}
			if(st.size() == n)
			{
				cout<<"{";
				for(int i=0; i<m; i++)
				{
					cout<<"<"<<A[i]<<","<<q[i]<<">";				
					if(i == m-1) cout<<"}"<<endl;
					else cout<<",";
				}
			}
			
			return;			
		}
		else{//继续递归
			for(int i=0; i<n; i++)
			{
				//保证q中的元素不重复
				int k=0;
				for( ; k<cnt; k++)
				{
					if(q[k] == B[i]) break;
				}	
				if(k == cnt)				
				{
					q[cnt] = B[i];
					dfs(dfs, cnt+1);
				}							
			}			
			return;
		}
	};

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

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

相关文章

LeeCode题库第十八题

项目场景&#xff1a; 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#xff09;&…

Zookeeper 和 Redis 哪种更好?

目录 前言 &#xff1a; 什么是Zookeeper 和 Redis &#xff1f; 1. 核心定位与功能 2. 关键差异点 (1) 一致性模型 (2) 性能 (3) 数据容量 (4) 高可用性 3. 适用场景 使用 Zookeeper 的场景 使用 Redis 的场景 4. 替代方案 5. 如何选择&#xff1f; 6. 常见误区 7. 总结 前言…

公然上线传销项目,Web3 的底线已经被无限突破

作者&#xff1a;Techub 热点速递 撰文&#xff1a;Yangz&#xff0c;Techub News 今天早些时候&#xff0c;OKX 将上线 PI 的消息在圈内引起轩然大波&#xff0c;对于上线被板上钉钉为传销盘子的「项目」 &#xff0c;Techub News 联系了 OKX 公关&#xff0c;但对方拒绝置评…

C语言第18节:自定义类型——联合和枚举

1. 联合体 C语言中的联合体&#xff08;Union&#xff09;是一种数据结构&#xff0c;它允许在同一内存位置存储不同类型的数据。不同于结构体&#xff08;struct&#xff09;&#xff0c;结构体的成员各自占有独立的内存空间&#xff0c;而联合体的所有成员共享同一块内存区域…

解锁网络安全:穿越数字世界的防护密码

个人主页&#xff1a;java之路-CSDN博客(期待您的关注) 目录 网络安全&#xff1a;数字时代的基石 网络安全面面观 &#xff08;一&#xff09;定义与范畴 &#xff08;二&#xff09;发展历程 网络安全面临的威胁 &#xff08;一&#xff09;恶意软件肆虐 &#xff08;二…

python爬虫解决无限debugger问题

方法一 关闭定时任务 关闭断点执行代码打开断点 # 无限debugger产生原因 # 1. web开发者工具打开 # 2. js代码中有debugger # 3. js有定时处理[推荐] for(let i0;i<99999;i){window.clearInterval(i)}方法二 关闭breakpoint 方法三 修改JS代码 使用fiddler&#xff0c;抓…

C# 两种方案实现调用 DeepSeek API

目录 序 开发运行环境 访问API的一个通用方法 原生官网实现 申请 API key 调用实现 调用示例 腾讯云知识引擎原子调用 申请 API key 调用示例 小结 序 DeepSeek&#xff08;深度求索&#xff09; 最近可谓火爆的一塌糊涂&#xff0c;具体的介绍这里不再赘述&#x…

Linux下的进程切换与调度

目录 1.进程的优先级 优先级是什么 Linux下优先级的具体做法 优先级的调整为什么要受限 2.Linux下的进程切换 3.Linux下进程的调度 1.进程的优先级 我们在使用计算机的时候&#xff0c;通常会启动多个程序&#xff0c;这些程序最后都会变成进程&#xff0c;但是我们的硬…

anolis os 8.9安装jenkins

一、系统版本 # cat /etc/anolis-release Anolis OS release 8.9 二、安装 # dnf install -y epel-release # wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo # rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.…

Java基础知识总结(四十八)--TCP传输、TCP客户端、TCP服务端

**TCP传输&#xff1a;**两个端点的建立连接后会有一个传输数据的通道&#xff0c;这通道称为流&#xff0c;而且是建立在网络基础上的流&#xff0c;称之为socket流。该流中既有读取&#xff0c;也有写入。 **tcp的两个端点&#xff1a;**一个是客户端&#xff0c;一个是服务…

【python】http.server内置库构建临时文件服务

需要从linux开发机上下载一个文件到本地&#xff0c;约700M比较大&#xff0c;通过sz命令下载较慢且传输过程不稳定连续失败&#xff0c;后采用下面方式解决。 cd到一个目录下执行python -m http.server port&#xff0c;port为服务的端口号&#xff1a; 启动后浏览器中访问…

网络安全ids是什么意思

1、 简述IPS和IDS的异同点&#xff1b; 入侵检测系统&#xff08;IDS&#xff09; IDS&#xff08;Intrusion Detection Systems&#xff0c;入侵检测系统&#xff09;&#xff0c;专业上讲就是依照一定的安全策略&#xff0c;对网络、系统、运行状况进行监视&#xff0c;尽可能…

优选驾考小程序

第2章 系统分析 2.1系统使用相关技术分析 2.1.1Java语言介绍 Java语言是一种分布式的简单的 开发语言&#xff0c;有很好的特征&#xff0c;在安全方面、性能方面等。非常适合在Internet环境中使用&#xff0c;也是目前企业级运用中最常用的一个编程语言&#xff0c;具有很大…

42.水果销售系统(springbootvue的Java项目[含微信小程序])

目录 1.系统的受众说明 2.开发环境与技术 2.1 MYSQL数据库 2.2 Java语言 2.3 微信小程序技术 2.4 SpringBoot框架 2.5 B/S架构 2.6 Tomcat 介绍 2.7 HTML简介 2.8 MyEclipse开发工具 3.系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2 经济可行性 3.1.3 操作…

ffmpeg所有版本下载地址

地址如下&#xff1a;Index of /releaseshttps://ffmpeg.org/releases/

记PasteSpider部署工具的Windows.IIS版本开发过程之草稿-效果展示(4)

如果有人给你一串JSON数据,你需要编辑他,对于有开发基础的人来说,可能会好处理下,而对于没有开发基础的人来说,那就是灾难了! 那么有没有一个东西,可以让这个编辑更顺畅呢? 贴代码案例中的DynamicForm你值得拥有!本次展示作者在本机上操作IIS的示例,如下 IIS展示 先…

3D文档控件Aspose.3D实用教程: 在 Java 中创建 FBX 文件并无缝将圆柱体转换为网格

概述 创建FBX文件并将圆柱体转换为网格是 3D 建模和动画中的基本任务。这些过程在游戏、电影和建筑等行业中至关重要。通过使用Aspose.3D for Java &#xff0c;开发人员可以高效地管理 3D 场景和对象。这个强大的 Java 3D API 简化了 3D 模型的创建和操作。它的易用性和灵活性…

软考高级《系统架构设计师》知识点(一)

计算机硬件 校验码 码距&#xff1a;就单个编码A:00而言&#xff0c;其码距为1&#xff0c;因为其只需要改变一位就变成另一个编码。在两个编码中&#xff0c;从A码到B码转换所需要改变的位数称为码距&#xff0c;如A:00要转换为B:11&#xff0c;码距为2。一般来说&#xff0c;…

HTML 学习记录

HTML 学习记录 html是超文本标记语言&#xff0c;是一种标记语言 超文本&#xff1a;链接 标记&#xff1a;也叫标签&#xff0c;带尖括号的文本 标签语法 1.标签成对出现&#xff0c;中间包裹内容 2.<>里面放英文字母 3.结束标签比开始标签多一个 / 例如 <s…

Mac之JDK安装

Mac之JDK安装 一.安装 jdk 打开终端输入命令:java -version 查看是否已安装 JDK Oracle 官方下载地址 根据自己Mac 系统安装 查看 Mac 系统&#xff0c;打开中断命令&#xff0c;输入: uname -a Compressed Archive 是压缩文档&#xff0c;下载的是一个 .tar.gz 压缩包 D…