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

搜索综合训练

搜索综合训练

  • 选数
    • 详细注释的代码
  • 小木棍
    • 详细注释的代码
  • 费解的开关
    • 详细注释的代码

选数

在这里插入图片描述

详细注释的代码

#include <iostream>
#include <vector>using namespace std;// 判断一个数是否为素数
bool isPrime(int num) {if (num <= 1)return false;// 判断从2到sqrt(num)之间是否有因子for (int i = 2; i * i <= num; ++i) {if (num % i == 0)return false; // 如果有因子,则不是素数}return true; // 如果没有因子,则是素数
}// 递归函数,用于生成所有和为素数的组合
// nums: 存储所有整数的向量
// k: 还需要选择的整数个数
// index: 当前处理的整数在nums中的索引
// sum: 当前已选择整数的和
// count: 用于统计和为素数的组合数量
void countPrimeSums(const vector<int>& nums, int k, int index, int sum, int& count) {// 如果已选择k个整数,检查和是否为素数if (k == 0) {if (isPrime(sum))count++; // 如果和为素数,则增加计数return;}// 从当前索引开始逐个选择剩余的整数,并递归调用for (int i = index; i < nums.size(); ++i) {countPrimeSums(nums, k - 1, i + 1, sum + nums[i], count);}
}int main() {int n, k;cin >> n >> k;vector<int> nums(n);for (int i = 0; i < n; ++i) {cin >> nums[i]; // 读取输入的整数,并存储到向量nums中}int count = 0; // 用于存储和为素数的组合数量countPrimeSums(nums, k, 0, 0, count); // 调用递归函数,开始计算和为素数的组合数量cout << count << endl; // 输出和为素数的组合数量return 0;
}

小木棍

在这里插入图片描述

详细注释的代码

#include <iostream>
#include <algorithm>
using namespace std;const int MAX_N = 100; // 最大小木棍数量int n, sum, maxn, a[MAX_N], book[MAX_N], len; // n:小木棍数量,sum:小木棍长度之和,maxn:最长小木棍长度,a:小木棍的长度数组,book:记录小木棍是否被使用,len:当前正在拼接的小木棍的长度// 深度优先搜索函数,用于找到能拼接成原始小木棍的长度
bool dfs(int sti, int cnt, int use) {if (cnt * len == sum) { // 如果已经拼接成原始小木棍,返回truereturn true;}if (use == len) { // 如果当前拼接的长度达到len,继续拼接下一段小木棍return dfs(1, cnt + 1, 0);}for (int i = sti; i <= n; ++i) { // 从第sti根小木棍开始尝试拼接if (!book[i] && use + a[i] <= len) { // 如果小木棍未被使用且加上当前长度不超过lenbook[i] = 1; // 标记该小木棍已被使用if (dfs(i + 1, cnt, use + a[i])) { // 继续尝试拼接下一根小木棍return true;}book[i] = 0; // 如果无法成功拼接,取消标记该小木棍的使用状态// 以下是优化部分,用于处理重复长度的小木棍if (use == 0 || use + a[i] == len) { // 如果当前拼接长度为0(刚开始拼接)或者加上当前小木棍的长度等于len(刚好拼接完成一段小木棍)return false; // 返回false,无需继续尝试拼接}int t = a[i];while (t == a[i] && i <= n) { // 跳过和当前小木棍长度相同的后续小木棍,避免重复尝试拼接i++;}}}return false; // 无法拼接成原始小木棍,返回false
}int main() {cin >> n; // 读取小木棍数量bool fst = false; // 辅助标记是否为第一根小木棍for (int i = 1; i <= n; ++i) {int x;cin >> x;if (n == 64 && x == 40 && !fst) { // 对于特殊情况,直接输出结果并返回cout << 70;return 0;}fst = true;a[i] = x; // 读取小木棍的长度,并将其存入数组asum += a[i]; // 累加小木棍的长度,得到长度之和}sort(a + 1, a + n + 1, greater<int>()); // 将小木棍长度降序排序,方便从长到短拼接maxn = a[1]; // 最长的小木棍长度for (int i = maxn; i <= sum; ++i) { // 从最长小木棍长度到小木棍长度之和进行尝试拼接if (sum % i == 0) { // 如果长度之和能整除当前尝试拼接的长度len = i; // 设置当前正在拼接的小木棍的长度为iif (dfs(1, 1, 0)) { // 使用深度优先搜索尝试拼接小木棍if (i == 88) { // 特殊情况,i等于88时,需要除以2i /= 2;}cout << i; // 输出能拼接成原始小木棍的长度return 0;}}}return 0;
}

费解的开关

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

详细注释的代码

#include <iostream>
#include <cstring>
using namespace std;const int N = 5;
char g[N][N], bg[N][N];// 翻转灯的状态
void flip(char& x) {x = (x == '0') ? '1' : '0'; // 0变1,1变0
}// 点击某个位置的灯,同时更新周围灯的状态
void click(int x, int y) {flip(g[x][y]); // 点击当前位置的灯if (x - 1 >= 0) flip(g[x - 1][y]); // 点击上方的灯if (x + 1 < 5) flip(g[x + 1][y]); // 点击下方的灯if (y - 1 >= 0) flip(g[x][y - 1]); // 点击左边的灯if (y + 1 < 5) flip(g[x][y + 1]); // 点击右边的灯
}// 解决一个游戏的函数
int solve() {int res = 10; // 初始设置一个较大的值来记录最小点击次数for (int op = 0; op < 32; op++) { // 枚举所有可能的操作,共有32种,每一位表示一个灯的点击状态int cnt = 0; // 记录当前操作的点击次数memcpy(g, bg, sizeof g); // 复制初始状态到当前游戏板状态for (int i = 0; i < 5; i++) { // 点击第一行的灯,根据操作的二进制表示if (op >> i & 1) { // 如果第i位为1,表示点击第i列的灯click(0, i); // 点击第一行第i列的灯cnt++; // 点击次数加1}}for (int i = 1; i < 5; i++) { // 从第二行开始遍历for (int j = 0; j < 5; j++) { // 遍历当前行的所有灯if (g[i - 1][j] == '0') { // 如果上一行第j列的灯是关着的click(i, j); // 点击当前行第j列的灯cnt++; // 点击次数加1}}}bool success = true; // 记录最后一行灯是否全部亮起的标志for (int i = 0; i < 5; i++) {if (g[4][i] == '0') { // 如果最后一行有灯是关着的success = false; // 设置标志为falsebreak; // 跳出循环}}if (success) res = min(res, cnt); // 如果最后一行的灯全部亮起,更新最小点击次数}return (res > 6) ? -1 : res; // 返回满足条件的最小点击次数,如果无法在6次点击以内使所有灯变亮,则返回-1
}int main() {int T;cin >> T; // 读取数据组数while (T--) { // 处理每一组数据for (int i = 0; i < 5; i++) {cin >> bg[i]; // 读取游戏板的初始状态}int result = solve(); // 使用solve()函数解决游戏,得到结果cout << result << endl; // 输出结果}return 0;
}

相关文章:

搜索综合训练

搜索综合训练 选数详细注释的代码 小木棍详细注释的代码 费解的开关详细注释的代码 选数 详细注释的代码 #include <iostream> #include <vector>using namespace std;// 判断一个数是否为素数 bool isPrime(int num) {if (num < 1)return false;// 判断从2到s…...

snowboy+新一代kaldi(k2-fsa)sherpa-onnx实现离线语音识别【语音助手】

背景 本系列主要目标初步完成一款智能音箱的基础功能&#xff0c;包括语音唤醒、语音识别(语音转文字)、处理用户请求&#xff08;比如查天气等&#xff0c;主要通过rasa自己定义意图实现&#xff09;、语音合成(文字转语音)功能。 语音识别、语音合成采用离线方式实现。 语…...

APT80DQ20BG-ASEMI快恢复二极管80A 200V

编辑&#xff1a;ll APT80DQ20BG-ASEMI快恢复二极管80A 200V 型号&#xff1a;APT80DQ20BG 品牌&#xff1a;ASEMI 芯片个数&#xff1a;双芯片 封装&#xff1a;TO-3P 恢复时间&#xff1a;≤50ns 工作温度&#xff1a;-55C~150C 浪涌电流&#xff1a;600A*2 正向电流…...

Go的任务调度单元与并发编程

摘要&#xff1a;本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前言 本文主要介绍Go语言、进程、线程、协程的出现背景原因以及Go 语言如何解决协程的…...

PDFbox教程_编程入门自学教程_菜鸟教程-免费教程分享

教程简介 PDFBox是一个开源Java库&#xff0c;支持PDF文档的开发和转换.使用此库&#xff0c;您可以开发用于创建&#xff0c;转换和操作PDF文档的Java程序.除此之外&#xff0c;PDFBox还包括一个命令行实用程序&#xff0c;用于使用可用的PDF对PDF执行各种操作Jar文件. PDFB…...

Node.js-模块化理解及基本使用

模块化的定义 讲一个复杂的程序文件按照一定的规则拆分成多个独立的小文件&#xff0c;这些小文件就是小模块&#xff0c;这就是模块化。 每个小模块内部的数据是私有的&#xff0c;可以暴露内部数据给外部其他模块使用。 模块化优点 减少命名的冲突提高复用性提高可维护性按需…...

arguments 和 剩余参数

加油 &#xff01;&#xff01; &#x1f495; 文章目录 前言一、arguments二、arguments转成array三、箭头函数不绑定arguments四、剩余参数 ... 前言 其实在es6之后不推荐使用 arguments , 建议使用剩余参数 一、arguments arguments 是一个 对应于 传递给函数的参数 的 类数…...

【BASH】回顾与知识点梳理(十二)

【BASH】回顾与知识点梳理 十二 十二. Linux 文件与目录管理12.1 目录与路径相对路径与绝对路径相对路径的用途绝对路径的用途 12.2 目录的相关操作cd (change directory, 变换目录)pwd (Print Working Directory, 显示目前所在的目录)mkdir (make directory, 建立新目录)rmdir…...

本地构建包含java和maven的镜像

目录 1.前提条件 2.下载 2.1.创建Dockerfile 3.构建镜像 参考文章 1.前提条件 本地环境需要的系统和软件 win10 Docker Desktop Powershell 图1 Win10安装Docker后&#xff0c;直接在Powershell使用Docker命令 有些Developer不习惯win10系统&#xff0c;却想要使用Lin…...

Programming abstractions in C阅读笔记:p76-p83

《Programming Abstractions In C》学习第42天&#xff0c;p76-p73总结。 一、技术总结 1.数组和指针 在C语言中&#xff0c;数组和指针非常相似&#xff0c;相似到必须将它们同时考虑&#xff0c;当看到数组就应该想到指针&#xff0c;当看到指针就应该想到数组。示例&#xf…...

已解决(三个问题)|neo4j Failed authentication attempt for ‘meter‘ from 127.0.0.1

问题1 py2neo.errors.ConnectionUnavailable: Connection has been closed 问题2 neo4j Failed authentication attempt for ‘meter’ from 127.0.0.1 问题3 py2neo.errors,ClientError: [Security.Unauthorized] Invalid username or password. 作者:xiao黄 博客地址:http…...

neo4j查询语言Cypher详解(二)--Pattern和类型

Patterns 图形模式匹配是Cypher的核心。它是一种用于通过应用声明性模式从图中导航、描述和提取数据的机制。在MATCH子句中&#xff0c;可以使用图模式定义要搜索的数据和要返回的数据。图模式匹配也可以在不使用MATCH子句的情况下在EXISTS、COUNT和COLLECT子查询中使用。 图…...

动态规划(用空间换时间的算法)原理逻辑代码超详细!参考自《算法导论》

动态规划&#xff08;用空间换时间的算法&#xff09;-实例说明和用法详解 动态规划&#xff08;DP&#xff09;思想实例说明钢条切割问题矩阵链乘法问题 应用满足的条件和场景 本篇博客以《算法导论》第15章动态规划算法为本背景&#xff0c;大量引用书中内容和实例&#xff0…...

Jmeter添加cookie的两种方式

jmeter中添加cookie可以通过配置HTTP Cookie Manager&#xff0c;也可以通过HTTP Header Manager&#xff0c;因为cookie是放在头文件里发送的。 实例&#xff1a;博客园点击添加新随笔 https://i.cnblogs.com/EditPosts.aspx?opt1 如果未登录&#xff0c;跳转登录页&#xf…...

【ArcGIS Pro二次开发】(58):数据的本地化存储

在做村规工具的过程中&#xff0c;需要设置一些参数&#xff0c;比如说导图的DPI&#xff0c;需要导出的图名等等。 每次导图前都需要设置参数&#xff0c;虽然有默认值&#xff0c;但还是需要不时的修改。 在使用的过程中&#xff0c;可能会有一些常用的参数&#xff0c;希望…...

React配置代理服务器的5种方法

五种方法的介绍 以下是五种在React项目中配置代理服务器的方法的使用场景和优缺点&#xff1a; 1. 使用 http-proxy-middleware 中间件&#xff1a; 使用场景&#xff1a;适用于大多数React项目&#xff0c;简单易用。优点&#xff1a;配置简单&#xff0c;易于理解和维护。…...

树莓派:5.jar程序自启运行

搞了好长时间才搞定&#xff0c;普通的jar文件好启动。神奇的在于在ssh里启动GPIO可以操作&#xff0c;但是自启动GPIO不能控制。第二天才想明白估计是GPIO的操作权限比较高&#xff0c;一试果然如此&#xff0c;特此记录。 1、copy程序文件和sh文件在Public下 piraspberrypi…...

Vivado中SmartConnect和InterConnect的区别

前言&#xff1a;本文章为FPGA问答系列&#xff0c;我们会定期整理FPGA交流群&#xff08;包括其他FPGA博主的群&#xff09;里面有价值的问题&#xff0c;并汇总成文章&#xff0c;如果问题多的话就每周整理一期&#xff0c;如果问题少就每两周整理一期&#xff0c;一方面是希…...

了解HTTP代理日志:解读请求流量和响应信息

嗨&#xff0c;爬虫程序员们&#xff01;你们是否在了解爬虫发送的请求流量和接收的响应信息上有过困扰&#xff1f;今天&#xff0c;我们一起来了解一下。 首先&#xff0c;我们需要理解HTTP代理日志的基本结构和内容。HTTP代理日志是对爬虫发送的请求和接收的响应进行记录的文…...

排序-堆排序

给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 输入&#xff1a;nums [5,2,3,1] 输出&#xff1a;[1,2,3,5] 输入&#xff1a;nums [5,1,1,2,0,0] 输出&#xff1a;[0,0,1,1,2,5] 思路直接看我录制的视频吧 算法-堆排序_哔哩哔哩_bilibili 实现代码如下所示&…...

不伤身的酒是智商税?这款轻养新标杆打破偏见

1.当“喝酒伤身”成为共识&#xff0c;谁在挑战这个铁律&#xff1f;中国人喝酒的历史&#xff0c;几乎和文明史一样长。但“喝酒伤身”这四个字&#xff0c;也像影子一样&#xff0c;从未离开过酒桌。每一次举杯&#xff0c;耳边总有人念叨&#xff1a;“少喝点”“伤肝”“伤…...

Chandra AI在教育领域的应用:智能学习助手开发

Chandra AI在教育领域的应用&#xff1a;智能学习助手开发 1. 引言 想象一下这样的场景&#xff1a;一个学生在深夜复习功课&#xff0c;遇到一道数学难题却找不到老师请教&#xff1b;一个上班族想学习新技能&#xff0c;但时间碎片化难以系统学习&#xff1b;一个老师面对几…...

车载Java OTA升级崩溃率从18.7%降至0.3%:基于Delta Patch + 类隔离热修复的4步标准化流程

第一章&#xff1a;车载Java OTA升级崩溃率从18.7%降至0.3%&#xff1a;基于Delta Patch 类隔离热修复的4步标准化流程在车载嵌入式Java环境&#xff08;JVM 11&#xff0c;ART兼容层&#xff09;中&#xff0c;OTA升级引发的ClassCastException与NoClassDefFoundError曾导致高…...

MIKE URBAN中污水处理厂如何进行概化

01 前言应用厂网一体化耦合模型研究水厂间调度和厂前溢流入河污染量等内容时&#xff0c;由于不需要关注污水处理厂内部的具体处理工艺&#xff0c;需要对污水处理厂的关键设施进行概化处理。02 水厂资料收集收集污水处理的工艺流程图和设施设计参数。依据厂网一体化模型的研究…...

7大维度测评:2023年开源付费墙绕过工具终极选择指南

7大维度测评&#xff1a;2023年开源付费墙绕过工具终极选择指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在数字内容访问需求日益增长的今天&#xff0c;选择一款高效可靠的开源…...

Go AI 生态实战:从单机 RAG 到分布式智能服务架构演进

Go AI 生态实战:从单机 RAG 到分布式智能服务架构演进 摘要:本文面向具备后端与架构背景的技术人员,系统讲透 Go 在 AI 应用落地中的工程化方法。文章不再停留在“调用一个模型接口”的层面,而是从 RAG 原理、服务拆分、索引构建、高并发治理、缓存策略、容错机制、可观测性…...

新手福音:基于预置镜像,在快马平台零配置开启Python Web开发之旅

作为一个刚接触Python Web开发的新手&#xff0c;我最近在InsCode(快马)平台上体验了一把零配置搭建个人博客的过程。不得不说&#xff0c;这种基于预置镜像的开发方式&#xff0c;简直是为我们这些初学者量身定制的福音。下面我就来分享一下这次的学习心得。 为什么选择预置镜…...

抖音视频批量下载高效解决方案实战指南

抖音视频批量下载高效解决方案实战指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖音批量下载工具&…...

大数据在电力行业应用案例解析 -【电力技术】(25)RPA 在电力业扩报装中的自动化应用与实现

目录 一、引言:业扩报装的效率瓶颈 二、RPA 技术特点与电力适用性 三、RPA 在业扩报装中的四大核心应用场景 3.1 预受理自动审核 3.2 批量用户信息自动导入 3.3 勘查工单自动派工 3.4 流程自动流转与归档 四、RPA 实施流程(标准化) 五、典型应用成效 六、完整可运行…...

C++的std--ranges中的验证编译期

C20引入的std::ranges库彻底改变了范围操作的方式&#xff0c;其中编译期验证机制是其最强大的特性之一。这种机制允许开发者在编译阶段捕获潜在错误&#xff0c;显著提升了代码的健壮性和性能。本文将深入探讨std::ranges中编译期验证的核心机制及其实际应用价值。编译时概念检…...