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

蓝桥杯刷题|03普及-真题

 [蓝桥杯 2017 省 B] k 倍区间

题目描述

给定一个长度为 N 的数列,A_{1}​,A_{2},⋯A_{N},如果其中一段连续的子序列 A_{i}​,A_{i+1},⋯A_{j} (i≤j) 之和是 K 的倍数,我们就称这个区间 [i,j] 是 K 倍区间。

你能求出数列中总共有多少个 K 倍区间吗?

输入格式

第一行包含两个整数 N 和 K(1≤N,K≤10^{5})。

以下 N 行每行包含一个整数 A_{i}(1≤A_{i}10^{5})。

输出格式

输出一个整数,代表 K 倍区间的数目。

输入输出样例

输入 #1

5 2
1  
2  
3  
4  
5  

输出 #1  6

说明/提示

时限 2 秒, 256M。蓝桥杯 2017 年第八届

        对于这个题,先用了暴力枚举来解题,发现只能过两个样例,其他的都超时了,之后看了题解,他们用了前缀和思想,下面我就整理前缀和相关概念和解题方法。

前缀和

前缀和是什么?

通俗理解,前缀和就是任意一个元素前面所有元素的和(包括本身);

例如:这有一个数组arr[3]={1,2,3}

           如果设定一个数组为此数组的前缀和数组perfix[3]={1,3,6}

前缀和的好处

好处就是减少时间复杂度,例如上面的题,要求一段区间的和,用暴力枚举就会超时。使用前缀和,我们只需要用末尾的前缀和减去初位置的前缀和就可以得到该区间的和了;

我们来举个例子吧。定义一个arr[6]={1,2,3,4,5,6},求这个数组的任意一个区间[i,j]的和

暴力枚举

我们肯定会从第一个元素开始,每次往后+1;然后从第二个元素开始,每次往后+1...;

假设要求[i,j]这个区间的和

	for(int t=0;i<t;t++)int num1+=arr[t];for(int m=j;m<=j;m++)int num2+=arr[m];int num=num2-num1;

前缀和

定义一个 前缀和数组,从头开始求前缀和之后的前缀和就是前一个前缀和加上当前元素

prefix[0]=arr[0];
for(int n=0;n<arr.size;i++)prefix[n]=prefix[n-1]+arr[n];
int num=predix[j]-prefix[i-1];

prefix[j]-prefix[i-1]=arr[i]+arr[i+1]+...+arr[j];

因为这个题是一维的,我们就先介绍一维前缀和。

K倍区间解题思路

这个题不仅利用了前缀和还要转换思想,要求K的倍数,也就是是说根据前缀和里面的元素的运算得到的结果,只要没有余数就行,为防止数值溢出,我们可以只给前缀和里面存余数就行,余数如果为0,那么就是k的倍数。

因此这个前缀和数组中存的不是和,而是和的余数。具体操作如下:

prefix[0]=arr[0];
for(int n=0;n<arr.size;i++)prefix[n]=(prefix[n-1]+arr[n])/K;

第一步可以直接判断prefix数组里面的值是否0,等于0就是K 的倍数。

第二步就是中间子序列的值是否是K的倍数,令这个子序列的左下标为left,令右下标为right,那么子序列的和可以表示为prefix[right]-prefix[left-1],判断是不是K的倍数就是判断这个子序列的和除于K的余数是否为0。

(prefix[right]-prefix[left-1])%K==0

prefix[right]%K-prefix[left-1]%K==0

prefix[right]%K==prefix[left-1]%K

因此只要判断prefix[right]%K==prefix[left-1]%K就行,换个说法就是要找相同的有几个,假如有a个相同,这些相同的两两组合就可以构成一个子序列,也就是高中学的排列组合,我定义一个cnt数组,里面的数就代表i向同的有几个,然后两两组合,也就是

C_{cnt[i]}^{2}=\frac{cnt[i]*(cnt[i]-1)}{2*1}

最后不要忘了前缀和里面单独余数为0的也是K的倍数,cnt[0]就是余数为0的个数。加上就行。

最后就是注意,记得数据类型定义为long long int

具体代码如下

 #include<iostream>
#include<vector>
using namespace std;
long long int n=1e6+10;
int main()
{long long int N,K,num=0,i;cin>>N>>K;vector <long long int>arr(n);//原数组 vector <int>prefix(n);//前缀和数组vector <long long int>cnt(n);for(i=1;i<=N;i++){cin>>arr[i];//数组输入prefix[i]=(prefix[i-1]+arr[i])%K;//前缀和数组 cnt[prefix[i]]++;//统计里面相同的 }for(i=0;i<N;i++){num+=cnt[i]*(cnt[i]-1)/2;//将相同的进行排列组合 }cout<<num+cnt[0];//余数为0的本来就是K的倍数 return 0;} 

相关文章:

蓝桥杯刷题|03普及-真题

[蓝桥杯 2017 省 B] k 倍区间 题目描述 给定一个长度为 N 的数列&#xff0c;​,,⋯&#xff0c;如果其中一段连续的子序列 ​,,⋯ (i≤j) 之和是 K 的倍数&#xff0c;我们就称这个区间 [i,j] 是 K 倍区间。 你能求出数列中总共有多少个 K 倍区间吗&#xff1f; 输入格式 …...

【动态三维重建】Deformable 3D Gaussians 可变形3D GS用于单目动态场景重建(CVPR 2024)

主页&#xff1a;https://ingra14m.github.io/Deformable-Gaussians/ 代码&#xff1a;https://github.com/ingra14m/Deformable-3D-Gaussians 论文&#xff1a;https://arxiv.org/abs/2309.13101 文章目录 摘要一、前言二、相关工作2.1 动态场景的神经渲染2.2 神经渲染加速 三…...

智能驾驶域控制器行业介绍

汽车智能驾驶功能持续高速渗透&#xff0c;带来智能驾驶域控制器市场空间快速增 长。智驾域控制器是智能驾驶决策环节的重要零部件&#xff0c;主要功能为处理感知 信息、进行规划决策等。其核心部件主要为计算芯片&#xff0c;英伟达、地平线等芯 片厂商市场地位突出。随着消费…...

[数据集][目标检测]焊接件表面缺陷检测数据集VOC+YOLO格式2292张10类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2292 标注数量(xml文件个数)&#xff1a;2292 标注数量(txt文件个数)&#xff1a;2292 标注…...

微信小程序的页面制作---常用组件及其属性

微信小程序里的组件就是html里的标签&#xff0c;但其组件都自带UI风格和特定的功能效果 一、常用组件 view&#xff08;视图容器&#xff09;、text&#xff08;文本&#xff09;、button&#xff08;按钮&#xff09;、image&#xff08;图片&#xff09;、form&#xff08…...

什么样的网站不适合使用WordPress?

WordPress作为全球应用最广泛的CMS系统&#xff0c;很好很强大&#xff0c;被从多的网站使用。但是&#xff0c;也不是所有的网站。下面简站WP小编从自己多年WordPress建站经验的角度&#xff0c;给大家讲讲&#xff0c;有哪些网站不适合使用WordPress搭建。 1、功能特别多的功…...

vulhub中GitLab 任意文件读取漏洞复现(CVE-2016-9086)

GitLab是一款Ruby开发的Git项目管理平台。在8.9版本后添加的“导出、导入项目”功能&#xff0c;因为没有处理好压缩包中的软连接&#xff0c;已登录用户可以利用这个功能读取服务器上的任意文件。 环境运行后&#xff0c;访问http://your-ip:8080即可查看GitLab主页&#xff0…...

【爬虫】web自动化和接口自动化

专栏文章索引&#xff1a;爬虫 目录 一、介绍 二、推荐 1.接口自动化 2.Web自动化 一、介绍 爬虫技术一般可以分为两种类型&#xff1a;接口自动化和web自动化。下面是它们的简要介绍&#xff1a; 1.接口自动化 接口自动化技术的主要目的是通过模拟HTTP请求来实现自动化…...

哔哩哔哩后端Java一面

前言 作者&#xff1a;晓宜 个人简介&#xff1a;互联网大厂Java准入职&#xff0c;阿里云专家博主&#xff0c;csdn后端优质创作者&#xff0c;算法爱好者 最近各大公司的春招和实习招聘都开始了&#xff0c;这里分享下去年面试B站的的一些问题&#xff0c;希望对大家有所帮助…...

Vue.js前端开发零基础教学(二)

目录 前言 2.1 单文件组件 2.2 数据绑定 2.2.2 响应式数据绑定 2.3 指令 2.3.1 内容渲染指令 2.3.2 属性绑定指令 ​编辑 2.3.3 事件绑定指令 2.3.4 双向数据绑定指令 2.3.5 条件渲染指令 2.3.6 列表渲染指令 2.4 事件对象 2.5 事件修饰符 学习目标&am…...

Bert模型输出:last_hidden_state转换为pooler_output

1. BERT模型的输出 在BERT模型中&#xff0c;last_hidden_state和pooler_output是两个不同的输出。 (1) last_hidden_state: last_hidden_state是指BERT模型中最后一个隐藏层的隐藏状态。它是一个三维张量&#xff0c;其形状为[batch_size, sequence_length, hidden_size]。其…...

Docker Compose 基本语法

services 是顶级节点&#xff0c;也就是你要启动的服务全部放在这里。 MySOL就是我们预期中的一个服务。 mysql8:指的是我们这个服务叫 mysql8. image:我们这个服务里运行的是什么镜像&#xff0c;或者说跑的是什么。这里指定了使用 mysql:8.0.29 这个版本。 command:启动命令&…...

【算法集训】基础算法:贪心

1913. 两个数对之间的最大乘积差 void insertSort(int * a, int n) {for(int i 1; i < n; i) {int temp a[i];int j i - 1;while(j > 0 && temp < a[j]) {a[j 1] a[j];j--;}a[j 1] temp;} }int maxProductDifference(int* nums, int numsSize){insert…...

Centos7部署单节点MongoDB(V4.2.25)

&#x1f388; 作者&#xff1a;互联网-小啊宇 &#x1f388; 简介&#xff1a; CSDN 运维领域创作者、阿里云专家博主。目前从事 Kubernetes运维相关工作&#xff0c;擅长Linux系统运维、开源监控软件维护、Kubernetes容器技术、CI/CD持续集成、自动化运维、开源软件部署维护…...

隐私计算笔记(1)

一、可信流通体系 建立数据来源可确认、使用范围可界定、流通过程可追溯、安全风险可防范的数据可流通体系。 二、产生信任的基石 身份可确认利益可依赖能力有预期行为有后果 三、数据流通不可信风险 内循环&#xff1a;在内部循环中&#xff0c;数据持有方在其自身的运维…...

查询方法需要使用事务吗?

当数据库隔离级别是默认的可重复读&#xff08;Repeatable Read&#xff09;时&#xff0c;如果查询语句只有一条则不需要事务. 当有多条查询sql语句且需要确保多条sql语句处于同一时间维度时则需要使用事务来确保多条SQL语句处于同一时间节点. 相关知识点 mysql查询当前事务隔…...

剑指offer面试题40 数组中只出现一次的数字

考察点 异或运算&#xff0c;与运算知识点 题目 分析 本题目要求数组中只出现一次的俩个数字&#xff0c;并且要求O(1)时间复杂度和空间复杂度。试想一下如果只有一个数字出现一次&#xff0c;那么针对全部元素做异或运算就可以了&#xff0c;因为相同元素异或为0。现在有俩…...

gitLab server version 13.12.1 is not supported

拉代码的时候&#xff0c;报的这个错&#xff0c;实际上就是因为gitLab 版本太低了&#xff0c;这里不准备升级版本&#xff0c;打算继续使用账号密码来拉取代码 在idea已经安装的插件中&#xff0c;去掉gitlab插件&#xff0c;如下&#xff1a; 之后再拉取代码&#xff0c;就…...

如何在 iPhone 上使用蓝牙鼠标

iPhone 不支持使用传统的鼠标指针。 然而&#xff0c;有一个名为“AssistiveTouch”的功能可以在屏幕上模拟类似光标的指针。 启用它的方法如下&#xff1a; 打开 iPhone 上的“设置”应用程序。转到“辅助功能”。向下滚动并选择“触摸”。点击“辅助触控”。切换开关以打开 …...

matlab simulink 电力系统同步发电机励磁系统的建模与仿真

1、内容简介 略 77-可以交流、咨询、答疑 电力系统同步发电机励磁系统的建模与仿真 建立MATLAB的同步发电机励磁调节系统仿真模型&#xff0c;最后建立了以PID和PSS为励磁控制方式的同步发电机励磁调节系统数学模型&#xff0c;在Simulink环境下进行了仿真&#xff0c;收到…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

stm32wle5 lpuart DMA数据不接收

配置波特率9600时&#xff0c;需要使用外部低速晶振...