算法竞赛例题讲解:平方差 第十四届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组 C平方差

题目描述

给定 L L L R R R,问 L ≤ x ≤ R L\leq x \leq R LxR中有多少个数 x x x满足存在整数 y y y, z z z使得 x = y 2 − z 2 x = y^{2} - z^{2} x=y2z2

输入格式

输入一行包含两个整数 L L L, R R R,用一个空格分隔。

输出格式

输出一行包含一个整数满足题目给定条件的 x x x 的数量。

输入输出样例

输入 #1

1 5

输出 #1

4

说明/提示

【样例说明】
  • 1 = 1 2 − 0 2 1 = 1^{2} −0 ^{2} 1=1202
  • 3 = 2 2 − 1 2 3 = 2^{2}−1^{2} 3=2212
  • 4 = 2 2 − 0 2 4 = 2^{2}−0^{2} 4=2202
  • 5 = 3 2 − 2 2 5 = 3^{2}−2^{2} 5=3222

题解

本篇题解适合没有思路的人群,对于数学较好的人来说就会显得比较繁琐和臃肿。

乍一看挺简单,但是如果数学不是太好的人就没有思路,所以我们来看一下思路:

首先拿到这个题,先将 x = y 2 − z 2 x = y^{2} - z^{2} x=y2z2化简:

x = ( y + z ) ( y − z ) x = (y + z)(y - z) x=(y+z)(yz)

我们让 a = y + z a = y + z a=y+z 然后 b = y − z b = y - z b=yz ,得到如下式子:

{ a = y + z b = y − z \begin{cases} a = y + z \\ b = y - z \end{cases} {a=y+zb=yz

a a a b b b替换掉原来的式子:

x = a ∗ b x = a * b x=ab

此时这个式子中的x是确定值, a a a b b b是随机量。如果仅仅是这样是不行的, a a a b b b是有限制条件的,当我们找到 a a a b b b的限制条件,我们距离解题就不远了。

那么 a a a b b b的限制条件是什么呢?

继续观察这个式子:

{ a = y + z b = y − z \begin{cases} a = y + z \\ b = y - z \end{cases} {a=y+zb=yz

相加得到

a + b = 2 y a + b = 2y a+b=2y

y y y是一个随机量,但是 y y y是一个整数,又因为是 2 y 2y 2y,因此发现 a + b a + b a+b 的值一定是个偶数

什么样的数相加为偶数呢?

  • 奇 + 奇 = 偶
  • 偶 + 偶 = 偶

只有以上两种情况。

因此会发现, a a a b b b奇偶性相同

因此,对于 x = a ∗ b x = a * b x=ab ,我们需要将拆分成奇偶性相同的两个随机量。

由于:

  • 奇 * 奇 = 奇
  • 偶 * 偶 = 偶

奇 * 偶 的情况不讨论,因为不存在

所以发现,x的奇偶性不同时,拆分情况是唯一对应的,因此分情况讨论:

  • x为奇数时:令a = 1,b为本身。例如:x = 9时,a = 1, b = 9。a,b都为奇数,因此x = 9满足条件。
  • x为偶数时:令a = 2,b为x / 2.例如:x = 10时,a = 2, b = 5,但是发现b是奇数,因此x = 10不满足条件。x = 12 是,a = 2, b = 6,都是偶数,因此x = 12满足条件。

我们多举出几个例子之后发现所有的奇数都满足条件。因为我们令b = 本身,而x总是奇数,因此所有的奇数x都满足条件

对于偶数来说,我们想要让x满足条件时,需要让x / 2满足偶数的条件,也就是满足x / 2是2的倍数的条件,所以发现,a = 2, b 是 2的倍数,所以x是4的倍数。所以只要满足x为4的倍数,就满足条件。

总的来说,我们需要在 L L L R R R中找出所有奇数的个数和4的倍数的数的个数

程序代码如下:

// Problem: P9231 [蓝桥杯 2023 省 A] 平方差
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P9231
// Memory Limit: 256 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)/*************************************************************************> Author:Royi > Mail:royi990001@gmail.com ************************************************************************/#include <bits/stdc++.h>
using namespace std;
// 返回的是从0到x的奇数的个数
int f(int x) {if (!x) return 0;else return (x + 1) / 2;
}//返回的是从0到x的4的倍数的个数
int g(int x) {return x % 4;
}int main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int l, r;cin >> l >> r;cout << f(r) - f(l - 1) + g(r) - g(l - 1) << '\n';return 0;
}

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

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

相关文章

计算机设计大赛 深度学习 机器视觉 车位识别车道线检测 - python opencv

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习 机器视觉 车位识别车道线检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) …

刷题13 数组

989. 数组形式的整数加法 整数的 数组形式 num 是按照从左到右的顺序表示其数字的数组。例如&#xff0c;对于 num 1321 &#xff0c;数组形式是 [1,3,2,1] 。 给定 num &#xff0c;整数的 数组形式 &#xff0c;和整数 k &#xff0c;返回 整数 num k 的 数组形式 。 输入…

12118 - Inspector‘s Dilemma (UVA)

题目链接如下&#xff1a; Online Judge 脑雾严重&#xff0c;这道题一开始我想的方向有问题.....后来看了别人的题解才写出来的..... 用的是欧拉路径的充要条件&#xff1b;以及数连通块。需要加的高速路数目 连通块个数 - 1 sum&#xff08;每个连通块中连成欧拉路径需要…

EMC学习笔记(二十三)降低EMI的PCB设计指南(三)

双层板电源分配 1.单点与多点分布2.星型分布3.创建网格平面4.旁路和磁珠5.将噪声保持在芯片附近 tips&#xff1a;资料主要来自网络&#xff0c;仅供学习使用。 1.单点与多点分布 在一个真正的单点配电系统中&#xff0c;每个有源元件都有自己独立的电源和地&#xff0c;这些…

Hibernate JPA-@PreUpdate 和@PrePersist、@MappedSuperclass应用场景

文章目录 PrePersist注解 和 PreUpdate注解PreUpdatePrePersist 应用场景给一张表加上create_time&#xff0c;update_time这样的字段&#xff0c;想实现自动保存&#xff0c;更新这两个字段 MappedSuperclassInheritanceSINGLE_TABLE(将所有父类和子类集合在一张表)TABLE_PER_…

【React】如何使antd禁用状态的表单输入组件响应点击事件?

最近遇到一个需求&#xff0c;需要在<Input.textarea>组件中&#xff0c;设置属性disabled为true&#xff0c;使textarea响应点击事件&#xff0c;但直接绑定onClick并不会在禁用状态下被响应。 解决方法1 之后尝试了很多方法&#xff0c;比如设置csspointer-events:no…

【Make编译控制 07】CMake常用命令

目录 一、变量相关命令 1. 定义变量 2. 设置C标准 3. 设置输出路径 二、文件相关命令 1. file 命令 2. aux_source_directory 命令 2. include_directories 命令 三、字符串相关命令 1. 字符串输出 2. 字符串拼接 3. 字符串移除 前情提示&#xff1a;【Make编译控制 …

【Dubbo源码二:Dubbo服务导出】

入口 Dubbo服务导出的入口&#xff1a;服务导出是在DubboBootstrapApplicationListener在监听到ApplicationContextEvent的ContextRefreshedEvent事件后&#xff0c;会触发dubboBootstrap.start(), 在这个方法中最后会导出Dubbo服务 DubboBootstrapApplicationListener Dub…

Python装饰器详解:实例分析与使用场景

在Python中,装饰器是一种强大的语法特性,允许在不修改原始代码的情况下,动态地修改或增强函数的行为。本文将通过两个实际的例子,分别介绍了计时装饰器和缓存装饰器,并深入探讨了它们的实现原理和使用场景。 1. 计时装饰器 import timedef timing_decorator(func):def w…

无人机飞控算法原理基础研究,多旋翼无人机的飞行控制算法理论详解,无人机飞控软件架构设计

多旋翼无人机的飞行控制算法主要涉及到自动控制器、捷联式惯性导航系统、卡尔曼滤波算法和飞行控制PID算法等部分。 自动控制器是无人机飞行控制的核心部分&#xff0c;它负责接收来自无人机传感器和其他系统的信息&#xff0c;并根据预设的算法和逻辑&#xff0c;对无人机的姿…

【基础】比较器 - 振荡来自何处?

比较器是一个简单的概念-在输入端对两个电压进行比较。输出为高或者低。因此&#xff0c;在转换的过程中为什么存在振荡。 当转换电平缓慢改变的时候&#xff0c;这个现象经常会发生。常常是由于输入信号存在噪声&#xff0c;因此在转换电平附近的轻微波动会引起输出端的振荡。…

KMP算法与前缀函数

KMP算法与前缀函数 说明 本文参考了 OI Wiki。 首先来明确几个概念&#xff1a; 后缀&#xff1a;后缀是从父串某个位置i开始到末尾结束的一个特殊字符串。真后缀&#xff1a;不为父串本身的后缀字符串。前缀&#xff1a;从父串开头到某个位置i结束的一个特殊字符串。真前缀…

in r, 找出所有重复的元素,包括第一个 R语言|如何筛选所有的重复行(包括第一行重复在内)

library(dplyr) data <- metadata %>%group_by(type) %>% # 根据你要筛选的列进行分组filter(duplicated(type)|n()!1) %>% # 将该列中有重复的行挑选出来ungroup() 方法二 # 示例向量 x <- c(1, 2, 3, 2, 4, 5, 5, 6)# 找出所有重复的元素&#xff08;包括第一…

基于深度学习算法的轴承故障自主分类

1. 要求 轴承有3种故障&#xff1a;外圈故障&#xff0c;内圈故障&#xff0c;滚珠故障&#xff0c;外加正常的工作状态。如表1所示&#xff0c;结合轴承的3种直径&#xff08;直径1,直径2,直径3&#xff09;&#xff0c;轴承的工作状态有10类&#xff1a; 表1 轴承故障类别 外…

单片机学习路线(简单介绍)

学习单片机对于电子爱好者和未来的嵌入式系统工程师来说是一段激动人心的旅程。单片机因其强大的功能、灵活性以及在各种智能设备中的广泛应用&#xff0c;成为了电子和计算机科学领域一个不可或缺的组成部分。如果你对如何开始这段旅程感到好奇&#xff0c;那么你来对地方了。…

Python爬虫:搭建本地IP池

本地代理IP池 代理IP池是一种由多个代理IP构成的集合&#xff0c;可以通过接口等方式随时获取可用的代理IP。通俗地打个比方&#xff0c;它就是一个池子&#xff0c;里面装了很多代理ip。代理IP具有以下几个特征&#xff1a; 1、池子里的ip是有生存周期的&#xff0c;它们将被…

Nginx配置php留档

好久没有用过php了&#xff0c;近几日配置nginxphp&#xff0c;留档。 安装 ubunt下nginx和php都可以使用apt安装&#xff1a; sudo apt install nginx php8 如果想安装最新的php8.2,则需要运行下面语句&#xff1a; sudo dpkg -l | grep php | tee packages.txt sudo add-…

计算机算术

计算机算术 数据是什么 数据是各种各样的信息&#xff0c;如数字、文本、计算机程序、音乐、图像、符号等等&#xff0c;实际上&#xff0c;信息可以是能够被计算机存储和处理的任何事物。 位与字节 计算机中存储和处理信息的最小单位是位&#xff08;Binary digit比特&#x…

[C#] 如何对列表,字典等进行排序?

对列表进行排序 下面是一个基于C#的列表排序的案例&#xff1a; using System; using System.Collections.Generic;class Program {static void Main(string[] args){// 创建一个列表List<int> numbers new List<int>() { 5, 2, 8, 1, 10 };// 使用Sort方法对列…

[动态规划]判断整除

题目 一个给定的正整数序列&#xff0c;在每个数之前都插入号或-号后计算它们的和。比如序列&#xff1a;1、2、4共有8种可能的序列&#xff1a; (1) (2) (4) 7 (1) (2) (-4) -1 (1) (-2) (4) 3 (1) (-2) (-4) -5 (-1) (2) (4) 5 (-1) (2) (-4) -3 (…