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;  // 程序正常结束
}

大佬的思路(牛牛牛):

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

纯vue手写流程组件

前言 网上有很多的vue的流程组件&#xff0c;但是本人不喜欢很多冗余的代码&#xff0c;喜欢动手敲代码&#xff1b;刚开始写的时候&#xff0c;确实没法下笔&#xff0c;最后一层一层剥离&#xff0c;总算实现了&#xff1b;大家可以参考我写的代码&#xff0c;可以拿过去定制…

[特殊字符][特殊字符][特殊字符][特殊字符][特殊字符][特殊字符]壁紙 流光染墨,碎影入梦

#Cosplay #&#x1f9da;‍♀️Bangni邦尼&#x1f430;. #&#x1f4f7; 穹妹 Set.01 #后期圈小程序 琼枝低垂&#xff0c;霜花浸透夜色&#xff0c;风起时&#xff0c;微光轻拂檐角&#xff0c;洒落一地星辉。远山隐于烟岚&#xff0c;唯余一抹青黛&#xff0c;勾勒出天光水…

kafka压缩

最近有幸公司参与kafka消息压缩&#xff0c;背景是日志消息量比较大。kafka版本2.4.1 一、确认压缩算法 根据场景不同选择不同。如果是带宽敏感患者推荐高压缩比的zstd&#xff0c;如果是cpu敏感患者推荐lz4 lz4和zstd底层都使用的是lz77算法&#xff0c;具体实现逻辑不同&am…

Java EE(14)——网络原理——UDPTCP数据报的结构

前言 本文主要介绍传输层的两个知名协议——UDP&TCP&#xff08;想了解其他层协议请移步Java EE(12)——初始网络&#xff09; 一.传输层的作用 传输层主要实现端对端的数据传输&#xff0c;在传输层的数据报中会包含源端口/目的端口的信息。端口的作用就是标识主机中的…

ccfcsp2701如此编码

//如此编码 #include<iostream> using namespace std; int main(){int n,m;cin>>n>>m;int a[21],b[21],c[21];for(int i1;i<n;i){cin>>a[i];}c[0]1;for(int i1;i<n;i){c[i]c[i-1]*a[i];}b[1](m%c[1])/c[0];int s1,s20;for(int i2;i<n;i){s2s2…

麒麟操作系统安装人大金仓数据库

如果你想拥有你从未拥有过的东西&#xff0c;那么你必须去做你从未做过的事情 在当前数字化转型和信息安全备受重视的背景下&#xff0c;众多公司积极推进国产化改造进程。在操作系统领域&#xff0c;统信、open 欧拉、中标麒麟、银河麒麟等国产操作系统崭露头角&#xff0c;逐…

【工具变量】全国地级市地方ZF债务数据集(2014-2023年)

地方ZF债务是地方财政运作的重要组成部分&#xff0c;主要用于基础设施建设、公共服务及经济发展&#xff0c;是衡量地方财政健康状况的重要指标。近年来&#xff0c;我国地级市的地方ZF债务规模不断变化&#xff0c;涉及一般债务和专项债务等多个方面&#xff0c;对金融市场、…

vlan实验

一、实验拓扑及要求&#xff1a; 二、实验步骤-思路&#xff1a; 实验需求解读&#xff1a; 首先PC1和PC3所在接口为access接口&#xff0c;属于VLAN 2&#xff0c;那么首先需求在SW1和SW2创建VLAN2&#xff0c;并且配置对应连接PC的接口链路类型为Access并放通VLAN 2PC2/4/5…

[samba配置]宿主机访问虚拟机目录

[samba配置]宿主机访问虚拟机目录 1、安装和启动Samba服务 sudo apt update sudo apt install samba2、查看samba服务是否正在运行 sudo systemctl status smbd sudo systemctl status nmbd3、配置samba服务设置为开机启动。 sudo systemctl enable smbd nmbd4、创建一个共…

PDF文件转Markdown,基于开源项目marker

​ 首先我们来问下deepseek 为啥要选marker呢 基于深度学习&#xff0c;一看就逼格拉满。搞科研必备&#xff0c;效果应该不会太差。跟其他的阿猫阿狗工具没法比。 看下官网 https://github.com/VikParuchuri/marker ​ 一看头像是个印度佬&#xff0c;自吹——又快又好。…

【深度学习与大模型基础】第6章-对角矩阵,对称矩阵,正交矩阵

一、对角矩阵 对角矩阵&#xff08;Diagonal Matrix&#xff09;是一种特殊的方阵&#xff0c;其非对角线上的元素均为零&#xff0c;只有对角线上的元素可能非零。具体来说&#xff0c;对于一个 nn的矩阵 A[]&#xff0c;如果满足 则 AA 称为对角矩阵。对角矩阵通常表示为&am…

C语言 数据结构【动态顺序表】详解

引言 详细介绍了顺序表中各个接口的实现&#xff0c;一定要亲自动手敲一遍&#xff0c;要能想象出具体的图像 第一次敲可能不能完全靠自己敲出来&#xff08;很正常&#xff09;&#xff0c;过一段时间可以根据顺序表的原理敲第二遍 孰能生巧 一、线性表 在介绍顺序表之前先…

人脸表情识别系统分享(基于深度学习+OpenCV+PyQt5)

最近终于把毕业大论文忙完了&#xff0c;众所周知硕士大论文需要有三个工作点&#xff0c;表情识别领域的第三个工作点一般是做一个表情识别系统出来&#xff0c;如下图所示。 这里分享一下这个表情识别系统&#xff1a; 采用 深度学习OpenCVPyQt5 构建&#xff0c;主要功能包…

集成学习(下):Stacking集成方法

一、Stacking的元学习革命 1.1 概念 Stacking&#xff08;堆叠法&#xff09; 是一种集成学习技术&#xff0c;通过组合多个基学习器&#xff08;base learner&#xff09;的预测结果&#xff0c;并利用一个元模型&#xff08;meta-model&#xff09;进行二次训练&#xff0c…

tcping 命令的使用,ping IP 和端口

1. ‌Windows系统安装‌ ‌下载tcping工具‌&#xff1a;根据系统位数&#xff08;32位或64位&#xff09;下载对应的tcping.exe文件。‌安装步骤‌&#xff1a; 将下载的tcping.exe文件复制到C:\Windows\System32目录下。如果下载的是64位版本&#xff0c;需将文件名改为tcpi…

浅谈跨平台框架的演变(H5混合开发->RN->Flutter)

引言 这里分为四个阶段&#xff1a; 第一阶段 &#xff1a; 原生开发 第二阶段 &#xff1a; H5混合开发 第三阶段&#xff1a; 跨平台RN 第四阶段&#xff1a; 跨平台Flutter 正文 第一阶段&#xff1a; 原生开发 开发成本比较大 &#xff1a; 需要Android 和ios 开发两…

《TCP/IP网络编程》学习笔记 | Chapter 20:Windows 中的线程同步

《TCP/IP网络编程》学习笔记 | Chapter 20&#xff1a;Windows 中的线程同步 《TCP/IP网络编程》学习笔记 | Chapter 20&#xff1a;Windows 中的线程同步用户模式和内核模式用户模式同步内核模式同步 基于 CRITICAL_SECTION 的同步内核模式的同步方法基于互斥量对象的同步基于…

力扣45.跳跃游戏

45. 跳跃游戏 II - 力扣&#xff08;LeetCode&#xff09; 代码区&#xff1a; #include<vector> class Solution {public:int jump(vector<int>& nums) {int ans[10005] ;memset(ans,1e4,sizeof(ans));ans[0]0;for(int i0;i<nums.size();i){for(int j1;j…

深入理解 Collections.emptyList():优雅处理空列表的利器!!!

&#x1f680; 深入理解 Collections.emptyList()&#xff1a;优雅处理空列表的利器&#xff01;&#x1f527; 大家好&#xff01;&#x1f44b; 今天我们来聊聊 Java 中一个非常实用但容易被忽视的小工具——Collections.emptyList()。&#x1f389; 如果你经常需要返回一个…

SpringBoot教程(十四) SpringBoot之集成Redis

SpringBoot教程&#xff08;十四&#xff09; | SpringBoot之集成Redis 一、Redis集成简介二、集成步骤 2.1 添加依赖2.2 添加配置2.3 项目中使用之简单使用 &#xff08;举例讲解&#xff09;2.4 项目中使用之工具类封装 &#xff08;正式用这个&#xff09;2.5 序列化 &…