当前位置: 首页 > news >正文

牛客网 HJ28 素数伴侣【二分图匹配,匈牙利算法】困难

描述

若两个正整数的和为素数,则这两个正整数称之为“素数伴侣”,如2和5、6和13,它们能应用于通信加密。现在密码学会请你设计一个程序,从已有的 N ( N 为偶数)个正整数中挑选出若干对组成“素数伴侣”,挑选方案多种多样,例如有4个正整数:2,5,6,13,如果将5和6分为一组中只能得到一组“素数伴侣”,而将2和5、6和13编组将得到两组“素数伴侣”,能组成“素数伴侣”最多的方案称为“最佳方案”,当然密码学会希望你寻找出“最佳方案”。

输入:
有一个正偶数 n ,表示待挑选的自然数的个数。后面给出 n 个具体的数字。
输出:
输出一个整数 K ,表示你求得的“最佳方案”组成“素数伴侣”的对数。

数据范围: 1 ≤ n ≤ 100 1≤n≤100 1n100 ,输入的数据大小满足 2 ≤ v a l ≤ 30000 2≤val≤30000 2val30000

输入描述:

输入说明
1 输入一个正偶数 n
2 输入 n 个整数

输出描述:

求得的“最佳方案”组成“素数伴侣”的对数。

示例1

输入:

4
2 5 6 13 

输出:

2

示例2

输入:

2
3 6

输出:

0

解法 匈牙利算法

题意整理如下:

  • 如果两个正整数的和为素数,则这两个正整数称之为“素数伴侣”。
  • 输入N(N为偶数)个正整数,从其中挑选出若干对组成“素数伴侣”。问怎么挑选,可以使得“素数伴侣”的对数最多。

不难发现,要使得大于等于2的两正整数之和为素数,则两个数必须要一奇一偶。我们首先定义两个数组,分别存储输入整数中的奇数和偶数。然后利用匈牙利算法找到“素数伴侣”对数最多时的配对数。匈牙利算法的核心思想是先到先得,能让就让。最后输出“素数伴侣”最多时的对数。

图解展示(匈牙利算法):

  • 首先A1和B2配对(先到先得);
  • 然后轮到A2,A2也可以和B2配对,这时B2发现A1还可以和B4配对,所以放弃了A1,选择和A2组成伴侣(能让就让)。
  • 接着A3直接和B1配对(先到先得)。
  • 最后A4尝试与B4配对,但这样A1就只能与B2配对,而A2就找不到伴侣了,一层层递归下来,发现不可行,所以A4不能与B4配对。
#include <iostream>
#include <vector>
#include <cstdlib>
#include <algorithm>
using namespace std;
const int maxn = 30010;
int n, a;
vector<int> odd, even;
bool vis[maxn];
int match[maxn];
bool np[maxn * 2] = {true, true, false};
void findPrimes() {for (int i = 2; i < maxn * 2; ++i) {if (!np[i]) { // 是素数for (int j = i * i; j < maxn * 2; j += i) {np[j] = true;}}}
}
bool dfs(int x) {for (int j = 0; j < even.size(); ++j) { // odd[i]都可能与even[j]构成素数int y = even[j];if (!vis[y] && !np[x + y]) {vis[y] = true;if (!match[y] || dfs(match[y])) {match[y] = x; return true;}}}return false; // 找不到和odd[i]匹配的even[j]
}
int main() {cin >> n;findPrimes();for (int i = 0; i < n; ++i) {cin >> a;if (a & 1) odd.push_back(a);else even.push_back(a);}int ans = 0;for (int i = 0; i < odd.size(); ++i) {for (int j = 0; j < 30010; ++j) vis[j] = false;if (dfs(odd[i])) ++ans;}printf("%d", ans);
}
// 64 位输出请用 printf("%lld")

相关文章:

牛客网 HJ28 素数伴侣【二分图匹配,匈牙利算法】困难

描述 若两个正整数的和为素数&#xff0c;则这两个正整数称之为“素数伴侣”&#xff0c;如2和5、6和13&#xff0c;它们能应用于通信加密。现在密码学会请你设计一个程序&#xff0c;从已有的 N &#xff08; N 为偶数&#xff09;个正整数中挑选出若干对组成“素数伴侣”&am…...

带你畅玩ChatGPT

ChatGPT出来很久了,最近不少朋友还是不太会使用ChatGPT体验与机器人进行聊天,我正好发现有种非常简单的方式帮助大家体验ChatGPT,且响应速度非常快,写代码能力也不错,现在推荐给大家,希望对大家有所帮助。 目录 一、下载专用浏览器 1.1 下载链接 1.2 安装浏览器 二、…...

ChatGPT探索系列之六:思考ChatGPT的未来发展趋势和挑战

文章目录 前言一、未来发展趋势1. ChatGPT重塑数据分析之道2. ChatGPT颠覆企业运用人工智能和机器学习的途径3. ChatGPT颠覆自动化商业流程4. ChatGPT引领企业决策迈向新纪元 二、ChatGPT掀开未来充满机遇和挑战的新篇章总结 前言 ChatGPT发展到目前&#xff0c;其实网上已经有…...

TryHackMe-Year of the Fox(Linux渗透测试)

Year of the Fox 你能熬过狡猾的狐狸吗&#xff1f; 端口扫描 循例nmap 有个域名&#xff0c;加入hosts SMB枚举 smbmap enum4linux -a&#xff0c;枚举到两个账户 Web枚举 进80发现需要登录 上hydra RCE to Getshell 进来可以查看一些文件 bp发现这里存在过滤 burpfuzz一…...

ChatGPT 如何获取API Key

什么是OpenAI API Key? OpenAI是ChatGPT的“开发商”&#xff0c;提供API使得开发者可以在自己的应用程序上调用OpenAI的相关服务&#xff08;除了ChatGPT&#xff0c;OpenAI还有其他产品&#xff09;。如果想调用OpenAI的产品服务在自己的应用程序上&#xff0c;我们就需要申…...

明面抵制,暗中布局 对于AI,马斯克的言行为何如此“割裂”?

最近&#xff0c;马斯克创建了一家叫做“X”的空壳公司&#xff0c;目标是将其打造成涵盖各方面的多功能应用集合平台&#xff0c;推特、SpaceX、特斯拉、Neuralink等公司业务都已打包加入其中。如今&#xff0c;“X”公司再添新丁——X.AI&#xff0c;即马斯克新成立的人工智能…...

【微服务中间件学习】redis基础及项目使用

背景 最近跟着大佬学习&#xff0c;发现之前都是一知半解&#xff0c;还是得系统学一下。 重温redis&#xff0c;有一下整理Redis是一种基于内存的高性能键值存储系统&#xff0c;它支持多种数据结构和持久化方式&#xff0c;并提供了许多高级功能&#xff0c;如发布/订阅、事…...

ORA-04021:等待锁定对象时发生超时

现场人员反馈问题&#xff0c;drop表报错&#xff0c;如下图 是个rac环境&#xff0c;处理过程 1、2个节点上查看锁表&#xff0c;没任何输出 SYSorcl2> select name from v$db_object_cache where ownerUSR_DATAI and type in(PROCEDURE,FUNCTION) and locks > 0 and …...

【华为OD机试真题 C++】1066 - 新工号中数字的最短长度 | 机试题+算法思路+考点+代码解析

文章目录 一、题目&#x1f538;题目描述&#x1f538;输入输出&#x1f538;样例1&#x1f538;样例2&#x1f538;样例3 二、代码参考 作者&#xff1a;KJ.JK &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f…...

【数字 IC / FPGA】 有关建立/保持时间计算的思考

引言 最近准备一些数字IC的机试&#xff0c;刷到了一些有关静态时序分析的题目。有一些比较经典的题目&#xff0c;在这里整理分享一下。 有什么疑问可以在评论区交流~互相进步 双D触发器典型电路 假设时钟周期为Tcycle,Tsetup,Thold分别为触发器建立保持时间&#xff0c;为…...

【Fluent】Run can not be started until validation issues are resolved.

一、问题背景 因为在fluent中用Discard Data, Replace Mesh选项替换了网格&#xff0c;但是没有抛弃算例设置等参数。 当时我以为网格是完全一样的&#xff0c;便忽略了产生冲突/错误的可能。 之后在calculate的时候&#xff0c;报错&#xff1a;Run can not be started unt…...

【进阶C语言】有关动态内存管理的经典笔试题(详细图文讲解)

前言 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff0c;喜爱音乐的一位博主。 &#x1f4d7;本文收录于C语言进阶系列&#xff0c;本专栏主要内容为数据的存储、指针的进阶、字符串和内存函数…...

1.Java系列之基础面试题总结

1. 构造器是否可重写 首先&#xff0c;构造器是不能被继承的&#xff0c;因为每个类的类名都不相同&#xff0c;而构造器名称与类名相同&#xff0c;所以根本谈不上继承。 又由于构造器不能继承&#xff0c;所以就不能被重写。但是&#xff0c;在同一个类中&#xff0c;构造器…...

Android:usb转232串口通信

准备工作 首先得adb进入盒子root模式&#xff0c;将/dev/ttys1这个文件改为777&#xff0c;使得所有用户可操作 adb root adb remount adb shell 进入设备的root模式&#xff0c;执行 chmod 777 /dev/ttys1 执行完成后退出 exit 再执行 adb shell chmod 666 /dev/ttyS1 如…...

动态设置图片的主题色(保留明暗关系)

github地址 PrimaryColorDemo 效果 原始图片 就是一张普通的png图片 根据选择的主题色动态渲染。 思考 最近在思考怎么实现动态的设置图片的主题色。不是那种渲染透明iocn。而是把图片的明暗关系保留。而改变其中的主题色。终于花了半天的时间研究出来了。和大家共享。 …...

mybatis中#与$的区别

文章目录 区别详细讲解${}sql注入案例 区别 #会进行预编译&#xff0c;安全&#xff0c;通过#{}传入的参数 mybatis会认为是一个字符串&#xff0c;自动加上引号“” $ 不会进行预编译&#xff0c;通过$ 传入的参数会直接取出来使用&#xff0c;可能会产生sql注入风险&#xff…...

CVPR2023论文整理

文章目录 CVPR2023一. Vision and Language / Multimodal CVPR2023 根据官方信息统计&#xff0c;今年共收到 9155 份提交&#xff0c;比去年增加了 12%&#xff0c;创下新纪录&#xff0c;今年接收了 2360 篇论文&#xff0c;接收率为 25.78%。作为对比&#xff0c;去年有 81…...

RK3399平台开发系列讲解(中断篇)掌握信号处理

🚀返回专栏总目录 文章目录 一、信号的基本概念二、信号处理流程三、如何通过 API 注册一个信号处理函数四、可重入与异步信号安全3.1、可重入函数3.2、异步信号安全沉淀、分享、成长,让自己和他人都能有所收获!😄 📢信号在操作系统中有悠久的历史,信号的概念和使用方…...

业余爱好者想入门编程,一定远离那些只会说No的家伙,尤其程序员

视频&#xff1a;https://haokan.baidu.com/v?pdwisenatural&vid3050207991292418741 自媒体上的程序员群体有一个非常有意思的特点&#xff0c;就是特别愿意否定别人&#xff0c;特别喜欢说no&#xff0c;还有一个特点&#xff0c;特别不爱分享一些有用的技术和知识&…...

DHCP及中继(UOS)

DHCP服务器 中继器 客户端 服务器 安装DHCP apt install isc-dhcp-server -y 编辑配置文件 vim /etc/dhcp/dhcpd.conf 重启服务 systemctl restart isc-dhcp-server 配置监听网卡 vim /etc/default/isc-dhcp-server 中继器 安装dhcp yum install dhcp -y nmtui 修改…...

【Linux】进程的概念

文章目录 &#x1f4d6; 前言1. 冯诺依曼体系结构1.1 内存存在的意义&#xff1a;1.2 程序加载到内存的意义&#xff1a;1.3 程序的预加载&#xff1a; 2. 认识进程2.1 如何理解管理&#xff1a;2.2 什么叫是进程&#xff1a;&#xff08;初步理解&#xff09; 3. 简单认识操作…...

奇舞周刊第490期:WebAssembly 多语言/宿主环境中的使用

记得点击文章末尾的“ 阅读原文 ”查看哟~ 下面先一起看下本期周刊 摘要 吧~ 奇舞精选 ■ ■ ■ WebAssembly 多语言/宿主环境中的使用 WebAssembly (WASM) 的一个优势就是能够支持将不同语言编译成 WASM 代码&#xff0c;然后在不同的宿主环境中运行。这样就可以在不同的宿主环…...

【css】使用css实现提示框各种弹出效果。

简言 最近工作编写页面时&#xff0c;需要有一个提示框从下到上弹出的效果。 冥想了一下&#xff0c;实现了出来。 记录下实现思路。 实现思路 实现步骤如下&#xff1a; 编写样式。 首页要有承载内容的容器&#xff08;box)。外层在套一个包装盒子&#xff08;用来进行定位…...

1685_Excel的几种脚本处理方式

全部学习汇总&#xff1a; GreyZhang/python_basic: My learning notes about python. (github.com) 做个小结&#xff0c;实际上是写的我自己学习的过程。 关于Excel的处理方式很多&#xff0c;我也不会那么多&#xff0c;在这里我只想写一下我自己接触过的。大致是三种方式&a…...

Unity中使用struct和class来存储数据的注意事项

在 Unity 中&#xff0c;struct 和 class 都是用来定义自定义类型的关键字。它们的主要区别在于如何存储和传递它们的实例。 特点structclass存储方式值类型引用类型默认构造函数自动有性能快慢可空性不可空可空继承单继承单继承或多重继承 一、相似之处 1、都是用来定义自定…...

共阳(共阴)LED数码管编码交互演示

LED数码管原理 LED数码管有两大类&#xff0c;一类是共阴极接法&#xff0c;另一类是共阳极接法&#xff0c;共阴极就是各段的显示字码共用一个电源的负极&#xff0c;是高电平点亮&#xff0c;共阳极就是各段的显示字码共用一个电源的正极&#xff0c;是低电平点亮。只要控制…...

如何在 TensorFlow 中使用 GPU 加速深度学习计算?

一、前言 TensorFlow 是由 Google 开源的深度学习框架,它具有易用、高效、灵活等特点,被广泛应用于学术界和工业界中。而 GPU 是一种高性能的计算设备,可以加速深度学习的计算过程。本文将介绍如何在 TensorFlow 中使用 GPU 加速深度学习计算。 二、安装 TensorFlow 安装…...

RK3568平台开发系列讲解(Linux系统篇)线程 pthread 详解

🚀返回专栏总目录 文章目录 一、POSIX 线程模型二、pthread_create()创建线程三、线程属性3.1、初始化线程对象属性3.2、销毁一个线程属性对象3.3、线程的分离状态3.4、线程的调度策略3.5、线程的优先级3.6、线程栈四、线程退出五、回收已终止线程的资源沉淀、分享、成长,让…...

hspJAVA

循序渐进学Java 零基础 -韩顺平 第 1 章 内容介绍 1 1.1 本套 JAVA 课程内容 1 1.1.1 课程的三个阶段 1 1.1.2 关于课程的说明 1 1.1.3 课程特色 2 1.2 JAVA 就业方向 2 1.3 JAVA 开发场景举例 1-SSM 3 1.4 JAVA 开发场景举例 2&#xff1a;ANDROID 核心代码 3 1.5 JAVA 开发场…...

OpenAI-ChatGPT最新官方接口《嵌入向量式文本转换》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(五)(附源码)

Embeddings 嵌入向量式文本转换 前言Overview 概述What are embeddings? 什么是嵌入&#xff1f;How to get embeddings 如何获取嵌入python代码示例cURL代码示例 Embedding models 嵌入模型Second-generation models 第二代模型First-generation models (not recommended) 第…...