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

C/C++蓝桥杯算法真题打卡(Day6)

一、P8615 [蓝桥杯 2014 国 C] 拼接平方数 - 洛谷

方法一:算法代码(字符串分割法)

#include<bits/stdc++.h>  // 包含标准库中的所有头文件,方便编程
using namespace std;     // 使用标准命名空间,避免每次调用标准库函数时都要加 std::bool f[1000005];         // 定义一个布尔数组 f,用于标记某个数是否是完全平方数
int l, r;                // 定义两个整数 l 和 r,表示查询的范围 [l, r]
string s;                // 定义一个字符串 s,用于存储数字的字符串形式// 判断一个数是否是完全平方数
bool pfs(int x) {return (int)sqrt(x) == sqrt(x);  // 如果 x 的平方根的整数部分等于其平方根,则 x 是完全平方数
}int main() {cin >> l >> r;  // 读取输入的 l 和 r,表示查询的范围 [l, r]// 预处理:标记 [1, r] 范围内的所有完全平方数for (int i = 1; i <= r; i++) {if (pfs(i))  // 如果 i 是完全平方数f[i] = 1;  // 将 f[i] 标记为 1(true)}// 遍历 [l, r] 范围内的所有数for (int i = l; i <= r; i++) {if (f[i]) {  // 如果 i 是完全平方数s = to_string(i);  // 将 i 转换为字符串 sint sl = s.size();  // 获取字符串 s 的长度// 尝试将 s 分成两部分,判断这两部分是否都是完全平方数for (int j = 1; j < sl; j++) {int x = stoi(s.substr(0, j));  // 提取 s 的前 j 位,转换为整数 xint y = stoi(s.substr(j));     // 提取 s 的剩余部分,转换为整数 y// 如果 x 和 y 都是完全平方数if (f[x] && f[y]) {printf("%d\n", i);  // 输出 ibreak;  // 跳出内层循环,继续检查下一个 i}}}}return 0;  // 程序正常结束
}

代码思路

  1. 预处理完全平方数

    • 使用数组 f 标记 [1, r] 范围内的所有完全平方数。

    • 通过 pfs 函数判断一个数是否是完全平方数。

  2. 遍历查询范围

    • 对于 [l, r] 范围内的每个数 i,如果它是完全平方数,则将其转换为字符串 s

    • 尝试将 s 分成两部分,判断这两部分是否都是完全平方数。

  3. 输出符合条件的数

    • 如果找到满足条件的数 i,则输出它。


关键点

  • 完全平方数判断

    • 使用 sqrt 函数判断一个数是否是完全平方数。

    • 如果 (int)sqrt(x) == sqrt(x),则 x 是完全平方数。

  • 字符串分割

    • 将数字转换为字符串后,尝试将其分成两部分。

    • 使用 substr 函数提取子串,并使用 stoi 函数将子串转换为整数。

  • 范围查询

    • 只处理 [l, r] 范围内的数,确保程序效率。


方法二:算法代码(取模分割法)

#include<bits/stdc++.h>  // 包含标准库中的所有头文件,方便编程
using namespace std;     // 使用标准命名空间,避免每次调用标准库函数时都要加 std::bool f[1000005];         // 定义一个布尔数组 f,用于标记某个数是否是完全平方数
int l, r;                // 定义两个整数 l 和 r,表示查询的范围 [l, r]
string s;                // 定义一个字符串 s,用于存储数字的字符串形式(虽然在这段代码中未使用)// 判断一个数是否是完全平方数
bool pfs(int x) {return (int)sqrt(x) == sqrt(x);  // 如果 x 的平方根的整数部分等于其平方根,则 x 是完全平方数
}int main() {cin >> l >> r;  // 读取输入的 l 和 r,表示查询的范围 [l, r]// 预处理:标记 [1, r] 范围内的所有完全平方数for (int i = 1; i <= r; i++) {if (pfs(i))  // 如果 i 是完全平方数f[i] = 1;  // 将 f[i] 标记为 1(true)}// 遍历 [l, r] 范围内的所有数for (int i = l; i <= r; i++) {if (f[i]) {  // 如果 i 是完全平方数int k = 10;  // 初始化 k 为 10,用于分割数字// 尝试将 i 分成两部分,判断这两部分是否都是完全平方数for (int j = 1; j <= 5; j++) {  // 最多尝试 5 次分割,因为a和b的范围为10的6次方int x = i % k;  // 提取 i 的最后 j 位数字int y = i / k;  // 提取 i 的前面部分数字k *= 10;  // 将 k 乘以 10,用于下一次分割// 如果 x 和 y 都是完全平方数if (f[x] && f[y]) {printf("%d\n", i);  // 输出 ibreak;  // 跳出内层循环,继续检查下一个 i}}}}return 0;  // 程序正常结束
}

代码思路

  1. 预处理完全平方数

    • 使用数组 f 标记 [1, r] 范围内的所有完全平方数。

    • 通过 pfs 函数判断一个数是否是完全平方数。

  2. 遍历查询范围

    • 对于 [l, r] 范围内的每个数 i,如果它是完全平方数,则尝试将其分成两部分。

    • 使用变量 k 从 10 开始,逐步尝试将 i 分成两部分:

      • x = i % k:提取 i 的最后 j 位数字。

      • y = i / k:提取 i 的前面部分数字。

    • 检查 x 和 y 是否都是完全平方数。

  3. 输出符合条件的数

    • 如果找到满足条件的数 i,则输出它。


关键点

  • 完全平方数判断

    • 使用 sqrt 函数判断一个数是否是完全平方数。

    • 如果 (int)sqrt(x) == sqrt(x),则 x 是完全平方数。

  • 数字分割

    • 使用取模运算 % 和除法运算 / 将数字分成两部分。

    • 通过逐步增加 k 的值(10, 100, 1000, ...),尝试不同的分割方式。

  • 范围查询

    • 只处理 [l, r] 范围内的数,确保程序效率。

 

二、P8699 [蓝桥杯 2019 国 B] 排列数 - 洛谷(国赛题难啊qwq,已放弃ing)

大佬的算法代码: 

#include <bits/stdc++.h>  // 包含标准库中的所有头文件,方便编程
#define ll long long      // 定义宏 ll 表示 long long 类型
#define setp setprecision // 定义宏 setp 表示 setprecision 函数
#define mem(a, m) memset(a, m, sizeof(a))  // 定义宏 mem 表示 memset 函数
using namespace std;const int MOD = 123456;  // 定义常量 MOD,表示取模的值
int n, k;                // 定义两个整数 n 和 k,分别表示排列的长度和单调排列的折点数
int dp[505][505];        // 定义二维数组 dp,用于动态规划// 自定义取模函数
int mod(int a) {return a % MOD;  // 返回 a 对 MOD 取模的结果
}int main() {ios::sync_with_stdio(false);  // 关闭同步流,提高输入输出效率cin >> n >> k;  // 读取输入的 n 和 kdp[1][0] = 1;  // 初始化 dp[1][0] = 1,表示长度为 1 的排列有 1 种情况// 动态规划填充 dp 数组for(int i = 2; i < n; i++) {  // 遍历排列的长度从 2 到 n-1dp[i][0] = 2;  // 初始化 dp[i][0] = 2,表示长度为 i 的排列有 2 种单调排列for(int j = 0; j <= i; j++) {  // 遍历可能的折点数// 更新 dp[i+1][j],表示在长度为 i+1 的排列中,折点数为 j 的情况dp[i+1][j] += mod(dp[i][j] * (j + 1));// 更新 dp[i+1][j+1],表示在长度为 i+1 的排列中,折点数为 j+1 的情况dp[i+1][j+1] += mod(dp[i][j] * 2);// 更新 dp[i+1][j+2],表示在长度为 i+1 的排列中,折点数为 j+2 的情况dp[i+1][j+2] += mod(dp[i][j] * (i - j - 2));}}cout << dp[n][k-1] % MOD;  // 输出长度为 n 的排列中,折点数为 k-1 的情况数,并对 MOD 取模return 0;  // 程序正常结束
}

大佬的思路(牛牛牛):

相关文章:

C/C++蓝桥杯算法真题打卡(Day6)

一、P8615 [蓝桥杯 2014 国 C] 拼接平方数 - 洛谷 方法一&#xff1a;算法代码&#xff08;字符串分割法&#xff09; #include<bits/stdc.h> // 包含标准库中的所有头文件&#xff0c;方便编程 using namespace std; // 使用标准命名空间&#xff0c;避免每次调用…...

ORACLE RAC ASM双存储架构下存储部分LUN异常的处理

早上接到用户电话&#xff0c;出现有表空间不足的告警&#xff0c;事实上此环境经常巡检并且有告警系统&#xff0c;一开始就带着有所疑惑的心理&#xff0c;结果同事在扩大表空间时&#xff0c;遇到报错 ORA-15401/ORA-17505,提示ASM空间满了&#xff1a; ALERT日志&#xff1…...

【设计模式】SOLID 设计原则概述

SOLID 是面向对象设计中的五大原则&#xff0c;不管什么面向对象的语言&#xff0c; 这个准则都很重要&#xff0c;如果你没听说过&#xff0c;赶紧先学一下。它可以提高代码的可维护性、可扩展性和可读性&#xff0c;使代码更加健壮、易于测试和扩展。SOLID 代表以下五个设计原…...

从边缘到核心:群联云防护如何重新定义安全加速边界?

一、安全能力的全方位碾压 1. 协议层深度防护 四层防御&#xff1a; 动态过滤畸形TCP/UDP包&#xff08;如SYN Flood&#xff09;&#xff0c;传统CDN仅限速率控制。技术示例&#xff1a;基于AI的协议指纹分析&#xff0c;拦截异常连接模式。 七层防御&#xff1a; 精准识别业…...

others-rustdesk远程

title: others-rustdesk远程 categories: Others tags: [others, 远程] date: 2025-03-19 10:19:34 comments: false mathjax: true toc: true others-rustdesk远程, 替代 todesk 的解决方案 前篇 官方 服务器 - https://rustdesk.com/docs/zh-cn/self-host/rustdesk-server-o…...

记录 macOS 上使用 Homebrew 安装的软件

Homebrew 是 macOS 上最受欢迎的软件包管理器之一&#xff0c;能够轻松安装各种命令行工具和 GUI 应用。本文记录了我通过 Homebrew 安装的各种软件&#xff0c;并对它们的用途和基本使用方法进行介绍。 &#x1f37a; Homebrew 介绍 Homebrew 是一个开源的包管理器&#xff…...

springmvc中使用interceptor拦截

HandlerInterceptor 是Spring MVC中用于在请求处理之前、之后以及完成之后执行逻辑的接口。它与Servlet的Filter类似&#xff0c;但更加灵活&#xff0c;因为它可以访问Spring的上下文和模型数据。HandlerInterceptor 常用于日志记录、权限验证、性能监控等场景。 ### **1. 创…...

C++基础 [八] - list的使用与模拟实现

目录 list的介绍 List的迭代器失效问题 List中sort的效率测试 list 容器的模拟实现思想 模块分析 作用分析 list_node类设计 list 的迭代器类设计 迭代器类--存在的意义 迭代器类--模拟实现 模板参数 和 成员变量 构造函数 * 运算符的重载 运算符的重载 -- 运…...

使用excel.EasyExcel实现导出有自定义样式模板的excel数据文件,粘贴即用!!!

客户要求导出的excel文件是有好看格式的&#xff0c;当然本文举例模板文件比较简单&#xff0c;内容丰富的模板可以自行设置&#xff0c;话不多说&#xff0c;第一步设置一个"好看"的excel文件模板 上面要注意的地方是{.变量名} &#xff0c;这里的变量名对应的就是…...

Spring Boot 集成 Elasticsearch怎样在不启动es的情况下正常启动服务

解释 在spingboot 集成es客户端后&#xff0c;每当服务启动时&#xff0c;服务默认都会查看es中是否已经创建了对应的索引&#xff0c;如果没有索引则创建。基于上面的规则我们可以通过配置不自动创建索引来达到在没有es服务的情况下正常启动服务。 解决办法 在entity类的Docu…...

Java面试黄金宝典8

1. 什么是 Spring MVC 定义 Spring MVC 是 Spring 框架里用于构建 Web 应用程序的模块&#xff0c;它严格遵循 MVC&#xff08;Model - View - Controller&#xff09;设计模式。这种设计模式把应用程序清晰地划分成三个主要部分&#xff1a; Model&#xff08;模型&#xff0…...

JVM常见概念之条件移动

问题 当我们有分支频率数据时&#xff0c;有什么有趣的技巧可以做吗&#xff1f;什么是条件移动&#xff1f; 基础知识 如果您需要在来自一个分支的两个结果之间进行选择&#xff0c;那么您可以在 ISA 级别做两件不同的事情。 首先&#xff0c;你可以创建一个分支&#xff…...

Android AI ChatBot-v1.6.3-28-开心版[免登录使用GPT-4o和DeepSeek]

Android AI ChatBot- 链接&#xff1a;https://pan.xunlei.com/s/VOLi1Ua071S6QZBGixcVL5eeA1?pwdp3tt# 免登录使用GPT-4o和DeepSeek...

集成学习(上):Bagging集成方法

一、什么是集成学习&#xff1f; 在机器学习的世界里&#xff0c;没有哪个模型是完美无缺的。就像古希腊神话中的"盲人摸象"&#xff0c;单个模型往往只能捕捉到数据特征的某个侧面。但当我们把多个模型的智慧集合起来&#xff0c;就能像拼图一样还原出完整的真相&a…...

DeepSeek R1 本地部署指南 (3) - 更换本地部署模型 Windows/macOS 通用

0.准备 完成 Windows 或 macOS 安装&#xff1a; DeepSeek R1 本地部署指南 (1) - Windows 本地部署-CSDN博客 DeepSeek R1 本地部署指南 (2) - macOS 本地部署-CSDN博客 以下内容 Windows 和 macOS 命令执行相同&#xff1a; Windows 管理员启动&#xff1a;命令提示符 CMD ma…...

【TI MSPM0】Timer学习

一、计数器 加法计数器&#xff1a;每进入一个脉冲&#xff0c;就加一减法计算器&#xff1a;每进入一个脉冲&#xff0c;就减一 当计数器减到0&#xff0c;触发中断 1.最短计时时间 当时钟周期为1khz时&#xff0c;最短计时时间为1ms&#xff0c;最长计时时间为65535ms 当时…...

Windows部署deepseek R1训练数据后通过AnythingLLM当服务器创建问答页面

如果要了解Windows部署Ollama 、deepseek R1请看我上一篇内容。 这是接上一篇的。 AnythingLLM是一个开源的全栈AI客户端&#xff0c;支持本地部署和API集成。它可以将任何文档或内容转化为上下文&#xff0c;供各种语言模型&#xff08;LLM&#xff09;在对话中使用。以下是…...

重删算法中的Bloom滤波器详解与C++实现

一、Bloom滤波器基础概念 Bloom滤波器&#xff08;Bloom Filter&#xff09;是一种空间高效的概率型数据结构&#xff0c;用于快速判断某个元素是否存在于集合中。其核心特性&#xff1a; 存在不确定性&#xff1a;可能出现假阳性&#xff08;False Positive&#xff09;&…...

信奥赛CSP-J复赛集训(模拟算法专题)(27):P5016 [NOIP 2018 普及组] 龙虎斗

信奥赛CSP-J复赛集训(模拟算法专题)(27):P5016 [NOIP 2018 普及组] 龙虎斗 题目背景 NOIP2018 普及组 T2 题目描述 轩轩和凯凯正在玩一款叫《龙虎斗》的游戏,游戏的棋盘是一条线段,线段上有 n n n 个兵营(自左至右编号 1 ∼ n 1 \sim n 1∼n),相邻编号的兵营之间…...

多模态大模型常见问题

1.视觉编码器和 LLM 连接时&#xff0c;使用 BLIP2中 Q-Former那种复杂的 Adaptor 好还是 LLaVA中简单的 MLP 好&#xff0c;说说各自的优缺点&#xff1f; Q-Former&#xff08;BLIP2&#xff09;&#xff1a; 优点&#xff1a;Q-Former 通过查询机制有效融合了视觉和语言特征…...

SpringBoot项目实战(初级)

目录 一、数据库搭建 二、代码开发 1.pom.xml 2.thymeleaf模块处理的配置类 3.application配置文件 4.配置&#xff08;在启动类中&#xff09; 5.编写数据层 ②编写dao层 ③编写service层 接口 实现类 注意 补充&#xff08;注入的3个注解&#xff09; 1.AutoWir…...

Linux NFS、自动挂载与系统启动管理指南

1. NFS客户端挂载导出的目录的方式 NFS&#xff08;网络文件系统&#xff09; 允许将远程服务器的目录挂载到本地&#xff0c;像访问本地文件一样操作远程文件。挂载方式主要有两种&#xff1a; 手动挂载&#xff1a;使用 mount 命令&#xff08;临时生效&#xff0c;重启后丢…...

uniapp实现全局拖拽按钮

要先引入 “vue3-draggable-resizable”: “^1.6.5” 1.创建DragComponent组件 <template><!-- 抽屉组件 --><div class"drag-container" id"dragBox" :style"{ zIndex: zIndex }"><Vue3DraggableResizable :initW"…...

SOFABoot-10-聊一聊 sofatboot 的十个问题

前言 大家好&#xff0c;我是老马。 sofastack 其实出来很久了&#xff0c;第一次应该是在 2022 年左右开始关注&#xff0c;但是一直没有深入研究。 最近想学习一下 SOFA 对于生态的设计和思考。 sofaboot 系列 SOFABoot-00-sofaboot 概览 SOFABoot-01-蚂蚁金服开源的 s…...

计算机网络——总结

01. 网络的发展及体系结构 网络演进历程 从1969年ARPANET的4个节点发展到如今覆盖全球的互联网&#xff0c;网络技术经历了电路交换到分组交换、有线连接到无线覆盖的革命性变革。5G时代的到来使得网络传输速度突破10Gbps&#xff0c;物联网设备数量突破百亿级别。 网络体系…...

Umi-OCR- OCR 文字识别工具,支持截图、批量图片排版解析

Umi-OCR 是免费开源的离线 OCR 文字识别软件。无需联网&#xff0c;解压即用&#xff0c;支持截图、批量图片、PDF 扫描件的文字识别&#xff0c;能识别数学公式、二维码&#xff0c;可生成双层可搜索 PDF。内置多语言识别库&#xff0c;界面支持多语言切换&#xff0c;提供命令…...

高速网络包处理,基础网络协议上内核态直接处理数据包,XDP技术的原理

文章目录 预备知识TCP/IP 网络模型&#xff08;4层、7层&#xff09;iptables/netfilterlinux网络为什么慢 DPDKXDPBFPeBPFXDPXDP 程序典型执行流通过网络协议栈的入包XDP 组成 使用 GO 编写 XDP 程序明确流程选择eBPF库编写eBPF代码编写Go代码动态更新黑名单 预备知识 TCP/IP…...

C++:背包问题习题

1. 货币系统 1371. 货币系统 - AcWing题库 给定 V 种货币&#xff08;单位&#xff1a;元&#xff09;&#xff0c;每种货币使用的次数不限。 不同种类的货币&#xff0c;面值可能是相同的。 现在&#xff0c;要你用这 V 种货币凑出 N 元钱&#xff0c;请问共有多少种不同的…...

数据可信安全流通实战,隐语开源社区Meetup武汉站开放报名

隐语开源社区 Meetup 系列再出发&#xff01;2025 年将以武汉为始发站&#xff0c;聚焦"技术赋能场景驱动"&#xff0c;希望将先进技术深度融入数据要素流转的各个环节&#xff0c;推动其在实际应用场景中落地生根&#xff0c;助力释放数据要素的最大潜能&#xff01…...

java使用Apache POI 操作word文档

项目背景&#xff1a; 当我们对一些word文档&#xff08;该文档包含很多的标题比如 1.1 &#xff0c;1.2 &#xff0c; 1.2.1.1&#xff0c; 1.2.2.3&#xff09;当我们删除其中一项或者几项时&#xff0c;需要手动的对后续的进行补充。该功能主要是对标题进行自动的补充。 具…...