第十四届蓝桥杯 2023 C/C++组 平方差
目录
题目:
题目描述:
题目链接:
思路:
核心思路:
第一种思路:
第二种思路:
坑点:
代码:
数学+找规律 O(n) 50分代码详解:
O(1)满分代码详解:
打表+找规律 O(1)代码详解:
补充平方差结论题目:
补充题目链接:
补充平方差结论代码详解:
河狸的数代码:
你不干?有的是帕鲁干!代码:
题目:
题目描述:


题目链接:
洛谷 P9231 [蓝桥杯 2023 省 A] 平方差
蓝桥云课 平方差
思路:
核心思路:
数学+找规律或打表+找规律
第一种思路:
第一种思路是用数论知识,用数学的方式推导出结论。如果之前有平方差的前置数学知识的话,这题很快就能解决,如果没有的话靠自己用数学知识也能推导出来,但是能不能想得到就是另一回事了
平方差结论:若a,b都是整数,则a^2-b^2一定是奇数或者4的倍数
a^2-b^2=(a+b)*(a-b),若a,b两个都是奇数,则a+b,a-b都是偶数,则(a+b)*(a-b)是4的倍数,因为偶数都有公共的质因子2,所以偶数*偶数一定是4的倍数; 若a,b一奇一偶,则a+b,a-b都是奇数,则(a+b)*(a-b)是奇数,因为奇数*奇数一定是奇数
再大白话地说:由题x=y^2-z^2,由平方差公式x=(y+z)*(y-z),y+z和y-z的奇偶性相同,5+3=8,5-3=2或5+4=9,5-4=1。所以x满足可以拆成两个奇偶性相同的数的乘积,如果x是奇数,可以拆成1乘以它本身。如果x是偶数,可以拆成两个偶数,所以应是4的倍数,拆成2和x/2。综上,答案是[l,r]区间的奇数和4的倍数的数的个数
第二种思路:
第二种思路是打表+找规律,这也是蓝桥杯常考的找规律的题的一种做法(后续我会总结蓝桥杯常见的找规律的题)。这里先简单提一嘴:找规律的题的特点:数据非常大,通常大于1e8,看上去非常吓人,肯定暴力跑不出来。但是一般有两个特性:1.周期性(结果在固定后重复)2.答案符合某种递推式。打表的意思就是先尝试暴力得到符合题目要求的前100、1000项来找规律。
坑点:
这题还有一个很阴的地方,即使你找到正确规律正常写也很容易踩坑。由题发现R最大为1e9,并且这题是编程题,也就是说正常一个for循环也会超时,只能拿50分。所以发现规律之后还得优化时间复杂度,把时间复杂度从O(n)优化到O(1)才能拿满分
代码:
数学+找规律 O(n) 50分代码详解:
#include<bits/stdc++.h> //这题主要考察数学+找规律,同时还有时间复杂度的问题
using namespace std; //这是我了解思路之后的第一个程序,时间复杂度O(n),只能拿50分,剩下50分超时 //这题只有把时间复杂度优化到O(1)才能拿满分
int l,r;
int cnt;int main()
{scanf("%d %d",&l,&r);for(int i=l;i<=r;i++) //遍历l到r的每一个整数,使用for循环,时间复杂度O(n) {if(i%2==1) //判断是奇数 {cnt++;}if(i%4==0) //判断是4的倍数 {cnt++;}}cout<<cnt<<endl;return 0;
}
//数学+找规律思路:
//由题x=y^2-z^2,由平方差公式x=(y+z)*(y-z),y+z和y-z的奇偶性相同,5+3=8,5-3=2或5+4=9,5-4=1
//所以x满足可以拆成两个奇偶性相同的数的乘积
//如果x是奇数,可以拆成1乘以它本身
//如果x是偶数,可以拆成两个偶数,所以应是4的倍数,拆成2和x/2
//综上,答案是[l,r]区间的奇数和4的倍数的数的个数
O(1)满分代码详解:
#include<bits/stdc++.h> //时间复杂度O(1),不会超时能拿全部分
using namespace std;int l,r;int f_jishu(int x) //求从[0,x]区间奇数的个数
{return (x+1)/2; //传入0->0 ,1->1 ,2->1 ,3->2 ,4->2 ~~101->51
}int f_4(int x) //求[0,x]区间是4倍数的数的个数
{return x/4; //显然传入3->0 ,4->1 ,7->1 ,8->2 ~~101->25
}int main()
{scanf("%d %d",&l,&r);cout<<f_jishu(r)+f_4(r)-f_jishu(l-1)-f_4(l-1); //求[l,r]区间奇数和是4倍数的数的个数 return 0;
}
打表+找规律 O(1)代码详解:
#include<bits/stdc++.h> //蓝桥杯常考的找规律的题,由题R最大为10^9,数据范围太大,暴力肯定不行
using namespace std; //平方差结论:若a,b都是整数,则a^2-b^2一定是奇数或者4的倍数
//a^2-b^2=(a+b)*(a-b),若a,b两个都是奇数,则a+b,a-b都是偶数,则(a+b)*(a-b)是4的倍数,因为偶数都有公共
//的质因子2,所以偶数*偶数一定是4的倍数; 若a,b一奇一偶,则a+b,a-b都是奇数,则(a+b)*(a-b)是奇数,因为
//奇数*奇数一定是奇数
//如果知道这个前置结论:题目就转换为L到R之间是奇数或者是4的倍数的数总和 int l,r; //这题还有一个比较阴的地方就是,知道规律之后,用一次for还是会超时 //时间复杂度O(n),但是R最大为10^9,O(n)的话最大为10^9 >10^8,必须优化到O(1)
int f_jishu(int x)
{return (x+1)/2;
}int f_4(int x)
{return x/4;
}int main()
{scanf("%d %d",&l,&r);cout<<f_jishu(r)+f_4(r)-f_jishu(l-1)-f_4(l-1);return 0;
}//如果不知道这个前置结论,做的时候也没推出结论,那别无他法的时候还是先暴力枚举100个看看有没有规律
//int main()
//{
// for(int i=1;i<=100;i++) //暴力从1枚举到100找找看规律
// {
// for(int j=0;j<=100;j++) //i=k^2-j^2,由于搞不清到什么程度找不到j和k才算不满足要求
// {
// for(int k=j+1;k<=100;k++) //所以先把i和k的终止条件先设大一点试试看
// {
// if(i==k*k-j*j)
// {
// cout<<i<<' ';
// }
// }
// }
// }
// return 0;
//}
//1 3 4 5 7 8 9 9 11 12 13 15 15 16 16 17 19 20 21 21 23 24 24 25 25 27 27 28 29 31 32 32 33 33
//35 35 36 36 37 39 39 40 40 41 43 44 45 45 45 47 48 48 48 49 49 51 51 52 53 55 55 56 56 57 57
//59 60 60 61 63 63 63 64 64 64 65 65 67 68 69 69 71 72 72 72 73 75 75 75 76 77 77 79 80 80 80
//81 81 81 83 84 84 85 85 87 87 88 88 89 91 91 92 93 93 95 95 96 96 96 96 97 99 99 99 100 100
//输出数据发现有的数会重复输出几次,是因为j,k设置的终止条件满足能找到多种组合来平方差得到i
//但是毕竟是没有其他思路办法的无奈之举,所以把重复的数删一下再找找有没有规律
//1 3 4 5 7 8 9 11 12 13 15 16 17 19 20 21 23 24 25 27 28 29 31 32 33 35 36 37 39 40 41 43 44 45
//47 48 49 51 52 53 55 56 57 59 60 61 63 64 65 67 68 69 71 72 73 75 76 77 79 80 81 83 84 85 87 88
//89 91 92 93 95 96 97 99 100
//这些就是删去重复的满足题目要求的解了,通过这些数勉强能看出奇数和4的倍数能满足要求,但是有点抽象
补充平方差结论题目:
补充题目链接:
蓝桥云课 河狸的数(平方差结论)
蓝桥云课 你不干?有的是帕鲁干!(平方差结论拓展)
补充平方差结论代码详解:
河狸的数代码:
#include<bits/stdc++.h>
using namespace std;const int N=1e5+10; //多开一点,防止数组越界 int n;
long long a[N]; //由题整数最大为10^18,会爆int,一定要开long long int main()
{cin>>n;for(int i=0;i<n;i++){scanf("%lld",&a[i]);if(a[i]%4==0||a[i]%2==1) //平方差结论 {printf("Yes ");}else{printf("No ");}}return 0;
}
你不干?有的是帕鲁干!代码:
#include<bits/stdc++.h> //这题是平方差结论的拓展,由题要求x可以被表达成两个连续正奇数的平方之差
using namespace std; //两个连续正奇数:2*k-1 2*k+1(从1开始,所以k=1,2,3...)
//由平方差公式:(2*k+1)^2-(2*k-1)^2=(2*k+1+2*k-1)*(2*k+1-2*k+1)=8*k k=1,2,3...
//所以如果x能被表达为两个连续正奇数的平方之差,则x是8的倍数,注意由题x从0开始,但是x不能为0,因为k从
//1开始,即最小满足能被表达成两个连续正奇数的平方之差的数是8,所以判断条件是x!=0&&x%8==0,输出Yes
//题目还要求从小到大输出这两个连续正奇数,即先求k=x/8,a=2*k-1,b=2*k+1,输出a b即可 long long x; //由题输入的非负整数x最大为10^18,会爆int,要开long long
int n;int main()
{cin>>n;while(n--){scanf("%lld",&x);if(x!=0&&x%8==0) //由结论判断x是否能被表达成两个连续正奇数的平方之差 {printf("Yes\n");long long k=x/8; //注意x最大为10^18,x要开long long,那么k,a,b都要开long long long long a=2*k-1; //因为k,a,b都是很小的运算,如果x爆int,则k,a,b后续运算也会爆int long long b=2*k+1;printf("%lld %lld\n",a,b);}else{printf("No\n");}}return 0;
}
相关文章:
第十四届蓝桥杯 2023 C/C++组 平方差
目录 题目: 题目描述: 题目链接: 思路: 核心思路: 第一种思路: 第二种思路: 坑点: 代码: 数学找规律 O(n) 50分代码详解: O(1)满分代码详解&#x…...
前端路由缓存实现
vue3缓存实现完整版,查看这篇设计和实现方式吧,更完整...
I/O复用函数的使用——select
I/O复用函数的使用——select 目录 一、概念 二、select接口 2.1 基础概念 2.2 使用 select 函数的标准输入读取代码 2.3 基于 select 模型的多客户端 TCP 服务器实现 一、概念 i/o复用使得程序能同时监听多个文件描述符,可以提高程序性能。 之前为了让服务器能…...
ubuntu20.04安装安装x11vnc服务基于gdm3或lightdm这两种主流的显示管理器。
前言:在服务端安装vnc服务,可以方便的远程操作服务器,而不用非要插上显示器才行。所以在服务器上安装vnc是很重要的。在ubuntu20中,默认的显示管理器已经变为gdm3,它可以带来与 GNOME 无缝衔接的体验,强调功…...
图像预处理-图像轮廓特征查找
其实就是外接轮廓,有了轮廓点就可以找到最上、最下、最左、最右的四个坐标(因为有xmin,xmax,ymin,ymax)。就可以绘制出矩形。 一.外接矩形 cv.boundingRect(轮廓点) - 返回x,y,w,h,传入一个轮廓的轮廓点,若有多个轮廓需…...
全同态加密医疗数据分析集python实现
目录 摘要一、前言二、全同态加密与医疗数据分析概述2.1 全同态加密(FHE)简介2.2 医疗数据分析需求三、数据生成与预处理四、系统架构与流程4.1 系统架构图五、核心数学公式六、异步任务调度与(可选)GPU 加速七、PyQt6 GUI 设计八、完整代码实现九、自查测试与总结十、展望…...
list的学习
list的介绍 list文档的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一…...
HarmonyOS:Navigation实现导航之页面设置和路由操作
导读 设置标题栏模式设置菜单栏设置工具栏路由操作页面跳转页面返回页面替换页面删除移动页面参数获取路由拦截 子页面页面显示类型页面生命周期页面监听和查询 页面转场关闭转场自定义转场共享元素转场 跨包动态路由系统路由表自定义路由表 示例代码 Navigation组件适用于模块…...
管道位移自动化监测方案
一、背景 管道系统在区域性地质沉降作用下易形成非均匀应力场集中现象,诱发管体屈曲变形及环焊缝界面剥离等连续损伤累积效应,进而导致管道力学性能退化与临界承载能力衰减。传统人工巡检受限于空间覆盖度不足及数据采集周期长(≥72h…...
AI之pdf解析:Tesseract、PaddleOCR、RapidPaddle(可能为 RapidOCR)和 plumberpdf 的对比分析及使用建议
目录标题 Tesseract、PaddleOCR、RapidPaddle(可能为 RapidOCR)和 plumberpdf 的对比分析1. Tesseract类型: 开源 OCR 引擎特点:缺点:适用场景: 2. PaddleOCR (推荐)类型:特点:缺点:适用场景: 复杂版式文档、多语言混合文本、需要高精度识别的场景&#…...
【学习笔记】机器学习(Machine Learning) | 第五周| 分类与逻辑回归
机器学习(Machine Learning) 简要声明 基于吴恩达教授(Andrew Ng)课程视频 BiliBili课程资源 文章目录 机器学习(Machine Learning)简要声明 一、逻辑回归的基本原理分类判断条件模型输出的解释Sigmoid 函数与 Logistic 函数逻辑…...
悬停以及点击切换图片
为了实现悬停切换图片的功能,我们可以为每个按钮添加鼠标悬停事件监听器。以下是详细步骤和代码: 首先在控制器类中添加初始化方法,并添加事件监听器: package com.example.demo6;import javafx.event.ActionEvent; import java…...
Python 深度学习 第8章 计算机视觉中的深度学习 - 卷积神经网络使用实例
Python 深度学习 第8章 计算机视觉中的深度学习 - 卷积神经网络使用实例 内容概要 第8章深入探讨了计算机视觉中的深度学习,特别是卷积神经网络(convnets)的应用。本章详细介绍了卷积层和池化层的工作原理、数据增强技术、预训练模型的特征…...
Python基础总结(九)之推导式
文章目录 一、列表推导式1.1 列表推导式的格式1.2 列表推导式的注意事项1.3 列表推导式示例 二、 字典推导式2.1 字典推导式格式2.2 字典推导式注意事项2.3 字典推导式示例 三、 元组推导式3.1 元组推导式格式3.3 元组推导式示例 Python中的推导式有列表推导式,字典…...
[免费]SpringBoot+Vue博物馆(预约)管理系统【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue博物馆(预约)管理系统,分享下哈。 项目视频演示 【免费】SpringBootVue博物馆(预约)管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着计算机科学技术的日渐成熟ÿ…...
基于LangChain4J的AI Services实践:用声明式接口重构LLM应用开发
基于LangChain4J的AI Services实践:用声明式接口重构LLM应用开发 前言:当Java开发遇上LLM编程困境 在LLM应用开发领域,Java开发者常面临两大痛点:一是需要手动编排Prompt工程、记忆管理和结果解析等底层组件,二是复杂…...
制作一款打飞机游戏12:初稿原型
当前进展 任务回顾:在之前,我们做了大量的规划和原型设计。我们创建了关卡,添加了侧向滚动和BOSS模式背景重复,还制作了一个紧凑的瓦片集。原型完成:我们完成了五个原型,基本实现了飞机飞行、滚动…...
【python】pyCharm常用快捷键使用-(2)
pyCharm常用快捷键使用 快速导入任意类 【CTRLALTSPACE】代码补全【CTRLSHIFTENTER】代码快速修正【ALTENTER】代码调试快捷键...
位运算,状态压缩dp(算法竞赛进阶指南学习笔记)
目录 移位运算一些位运算的操作最短 Hamilton 路径(状态压缩dp模板,位运算) 0x是十六进制常数的开头;本身是声明进制,后面是对应具体的数; 数组初始化最大值时用0x3f赋值; 移位运算 左移 把二…...
极狐GitLab 项目 API 的速率限制如何设置?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 项目 API 的速率限制 (BASIC SELF) 引入于 15.10 版本,功能标志为rate_limit_for_unauthenticated_projects_api_…...
机器视觉lcd屏增光片贴合应用
在现代显示制造领域,LCD屏增光片贴合工艺堪称显示效果的"画龙点睛"之笔。作为提升屏幕亮度、均匀度和色彩表现的关键光学组件,增光片的贴合精度直接影响着终端用户的视觉体验。传统人工贴合方式难以满足当前超窄边框、高分辨率显示屏的严苛要求…...
VScode-py环境
settings.json {"git.ignoreLimitWarning": true,"code-runner.runInTerminal": true,"code-runner.executorMap": {"python": "python3"} } 第二句话保证在终端里面进行IO 第三句话保证python3的用户不会执行python关键…...
大模型面经 | 春招、秋招算法面试常考八股文附答案(三)
大家好,我是皮先生!! 今天给大家分享一些关于大模型面试常见的面试题,希望对大家的面试有所帮助。 往期回顾: 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题一) 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题二) 大模型面经 | 春招、秋招算法…...
用键盘实现控制小球上下移动——java的事件控制
本文分享Java的一个有趣小项目,实现用键盘控制小球的移动 涉及java知识点:Swing GUI框架,绘图机制,事件处理,焦点控制 1.编写窗口和面板 (1.)定义面板类 Panel 继承自Java 自带类JPanel (2.)定义窗口类 window 继承…...
《Relay IR的基石:expr.h 中的表达式类型系统剖析》
TVM Relay源码深度解读 文章目录 TVM Relay源码深度解读一 、从Constant看Relay表达式的设计哲学1. 类定义概述2. ConstantNode 详解1. 核心成员2. 关键方法3. 类型系统注册 3. Constant 详解1. 核心功能 二. 核心内容概述(1) Relay表达式基类1. RelayExprNode 和 RelayExpr 的…...
《马尼拉》桌游期望计算器
《马尼拉》桌游期望计算器:做出最明智的决策 注:本项目仍在开发验证中,计算结果可能不够准确,欢迎游戏爱好者提供协助! 在线使用 | GitHub 项目简介 马尼拉期望计算器是一个基于 Vue 3 Vite 开发的网页应用ÿ…...
23种设计模式-结构型模式之适配器模式(Java版本)
Java 适配器模式(Adapter Pattern)详解 🔌 什么是适配器模式? 适配器模式用于将一个类的接口转换成客户端所期望的另一种接口,让原本接口不兼容的类可以协同工作。 📦 就像插头转换器,让不同…...
动态LOD策略细节层级控制:根据视角距离动态简化远距量子态渲染
动态LOD策略在量子计算可视化中的优化实现 1. 细节层级控制:动态简化远距量子态渲染 在量子计算的可视化中,量子态通常表现为高维数据(如布洛赫球面或多量子比特纠缠态)。动态LOD(Level of Detail)策略通过以下方式优化渲染性能: 距离驱动的几何简化: 远距离渲染:当…...
算法 | 成长优化算法(Growth Optimizer,GO)原理,公式,应用,算法改进研究综述,matlab代码
===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 成长优化算法 一、算法原理二、核心公式三、应用领域四、算法改进研究五…...
线程池的介绍
目录 一、什么是线程池 二、线程池的详细内容 三、线程池的简化 一、什么是线程池 提到线程池,我们可能想到 常量池,可以先来说说常量池: 像是字符串常量,在Java程序最初构建的时候,就已经准备好了,等程…...
