K倍区间-C++题解

题目描述

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

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

输入描述

第一行包含两个整数 N 和 K( 1≤N,K≤100000 )

以下 N 行每行包含一个整数 Ai​ ( 1≤Ai​≤100000 )

输出描述

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

输入输出样例

示例:

输入

5 2
1
2
3
4
5

输出

6

运行限制

  • 最大运行时间:2s
  • 最大运行内存: 256M

题解:

方法一:
首先最普遍的方法是暴力算法,不停的遍历,通过条件判断进行计数。

#inlcude<bits/stdc++.h>
using namespace std;
int n, k;
int a[100000];
int result = 0;
int main()
{cin >> n >> k;for(int i=0; i<n; i++){cin >> a[i];}for(int i=0; i<n; i++){if(a[i] % k == 0){result++;}for(int j=i+1; j<n; j++){a[i] = a[i] + a[j];if(a[i] % k == 0){result++;}}}cout << result;return 0;
}

但是该方法的时间复杂度较高,两层for循环O(n*n)

方法二:
利用前缀和算法实现,前缀和就是数组的前 i 项之和。
假设:n=5, k=2。
则数组a[] = {1, 2, 3, 4, 5}的前置和为:
原数列:1,2,3,4,5
前缀和:1,3,6,10,15
针对该前缀和对k进行取余:
取余后:1,1,0,0,1
余数相同的两个元素之间的区间即为K倍区间,例如mod[2]==mod[5],则区间[i+1, j]也就是[3,5]是K倍区间。也可以这么理解区间(2,5]为K倍区间,该区间左开右闭。
这个理解后,就可以认为余数相同的两个数之间的区间即为K倍区间。因此对相同余数的两个元素进行排列组合。为C2 2加上C3 2(3为下标,2为上标),结果为1+3=4;
但是由于该区间是左开右闭的,因此要加上取余为0的个数。才构成完整的结果。
也就是先通过排列组合计算出中间区间为K倍区间的个数(4个):
2345,345,2,4
再加上取余为0的个数(2个):
123,1234
实际结果为6个。

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
long long input[100000], mod[100000] = {0};
long long add[100000] = {0}, sum = 0;
int main()
{// 请在此输入您的代码int n, k;long long reslut = 0;cin >> n >> k;//输入数列for(int i = 0; i < n; i++){cin >> input[i];}//对数列每个元素求前缀和存入sum,并对k进行取余存入modfor(int i = 0; i < n; i++){// 当前索引的前缀和sum += input[i];// 对该前缀和对k进行取余mod[i] = sum % k;// 对该索引前缀和取余后的数值出现次数进行累加add[mod[i]]++;}//计算结果for(int i = 0; i < n; i++){// 针对每种取余的值,进行计算排列组合,最后相加reslut += add[i] * (add[i]-1) / 2;}// 由于上面是左开右闭区间,缺少了一部分cout << reslut + add[0] << endl;return 0;
}

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

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

相关文章

“揭秘循环购模式:快消品行业复购利器

大家好&#xff0c;我是吴军&#xff0c;来自一家专注于软件开发与商业模式设计的公司。我们的核心业务是构建商城系统&#xff0c;并为各企业提供全方位的商业模式解决方案。至今&#xff0c;我们已经成功打造了超过两百种独特的商业模式&#xff0c;助力众多企业实现商业目标…

C++的并发世界(九)——条件变量

0.绪论——单例模型 单例设计模式是一种常见的设计模式&#xff0c;用于确保某个类只能创建一个实例。由于单例实例是全局唯一的。因此在多线程环境中使用单例模式时,需要考虑线程安全的问题。 1.消费者设计模式 2.condition_variable使用步骤 ①准备好信号量 std::conditio…

Linux系统Docker部署Apache Superset并实现公网实时访问本地数据

文章目录 前言1. 使用Docker部署Apache Superset1.1 第一步安装docker 、docker compose1.2 克隆superset代码到本地并使用docker compose启动 2. 安装cpolar内网穿透&#xff0c;实现公网访问3. 设置固定连接公网地址 前言 Superset是一款由中国知名科技公司开源的“现代化的…

linux中常用的查看日志命令

linux中常用的查看日志命令 tail命令 tail命令主要用于查看文件的末尾内容。 * **基本语法**&#xff1a;tail [选项] 文件 * **常用选项**&#xff1a; - -n [行数]&#xff1a;显示文件的最后指定行数。例如&#xff0c;tail -n 10 filename会显示文件的最后10行。 - …

电商API接口告诉你中国跨境电商何以“一路繁花”?

3月31日&#xff0c;启程跨境华东中心仓突破单日自营订单5000单&#xff0c;刷新连云港市跨境进口单日纪录。一季度&#xff0c;连云港市纳入“点点通”公共服务平台统计的跨境电商交易额达2.06亿元&#xff0c;同比增长77.03%。 连云港的“景象”只是中国跨境电商业态蓬勃发展…

结构化面试-有矛盾的人际沟通题

例题一&#xff1a; 你和小张一起值班&#xff0c;但是小张没来&#xff0c;刚好领导检查发现后批评了他&#xff0c;事后小张埋怨你&#xff0c; 认为你在领导面前表现&#xff0c;并在同事中传播&#xff0c;同事也觉得你不通人情&#xff0c;你怎么处理&#xff1f; 回答&a…

管廊ar实景可视化巡检提升安全性

在科技日新月异的今天&#xff0c;智慧工地ar远程巡检交互系统应运而生&#xff0c;它是ar开发公司深圳华锐视点综合运用了AR增强现实、5G通信、人工智能、物联网以及GPS北斗定位等前沿技术&#xff0c;为企业打造了一套全新的数字化巡检解决方案。不仅解放了巡检人员的双手&am…

防抖和节流(具体实现函数解析)

防抖 和 节流 是两个常用的 JavaScript 函数优化技巧&#xff0c;它们可以用来提高性能并减少不必要的函数调用。 防抖 防抖 函数会在一定时间内只触发一次&#xff0c;即使在该时间内函数被多次调用。 实现原理 防抖函数通常使用计时器来实现。当函数被调用时&#xff0c;…

Spring 5.x 源码之ClassPathBeanDefinitionScanner

Spring 5.x 源码之ClassPathBeanDefinitionScanner AnnotatedBeanDefinitionReader和ClassPathBeanDefinitionScanner的初始化是spring上线文初始化的起点&#xff0c;很多预加载的类会在spring接下来的初始化中发挥重要作用&#xff1b; 下面就是重点看看doScan()方法&#…

揭秘IP地理位置:从技术原理到隐私考量

在当今数字化的世界中&#xff0c;IP 地理位置已成为网络定位、广告定向和安全控制等领域的重要工具。然而&#xff0c;对于大多数人来说&#xff0c;IP 地理位置的工作原理以及与隐私之间的关系可能还有些模糊。本文将深入探讨 IP 地理位置的技术原理&#xff0c;以及与隐私相…

Vulnhub:MHZ_CXF: C1F

目录 信息收集 arp-scan nmap nikto WEB web信息收集 dirmap gobuster ssh登录 提权 获得初始立足点 系统信息收集 横向渗透 提权 信息收集 arp-scan ┌──(root㉿ru)-[~/桌面] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:50:56:…

2024Spring> HNU-计算机系统-实验2-datalab-导引

前言 datalab考验对于位运算以及浮点数存储的理解&#xff0c;如果真的肯花时间去搞懂&#xff0c;对计算机系统存储的理解真的能上一个台阶。与课程考试关联性上来说不是很大&#xff0c;但对于IEEE的浮点数表示一定要熟练掌握。 导引 ①实验工具包 要完成的是bits.c中的15个…

解决arcgis发布服务时报错:要素服务需要一个已注册的数据库

发布服务时发生以下报错&#xff1a; 双击列表中的报错项&#xff0c;在弹出的窗口中点击【已注册的数据库】后边的添加按钮&#xff0c;设置注册数据库的名称 点击添加按钮&#xff0c;配置数据库的基本信息&#xff08;注意&#xff1a;这里配置的数据库连接需要与连接sde数据…

Linux使用宝塔面板部署Discuz结合内网穿透实现公网访问本地论坛

文章目录 前言1.安装基础环境2.一键部署Discuz3.安装cpolar工具4.配置域名访问Discuz5.固定域名公网地址6.配置Discuz论坛 前言 Crossday Discuz! Board&#xff08;以下简称 Discuz!&#xff09;是一套通用的社区论坛软件系统&#xff0c;用户可以在不需要任何编程的基础上&a…

鸿蒙实现一种仿小红书首页滑动联动效果

前言&#xff1a; DevEco Studio版本&#xff1a;4.0.0.600 效果描述&#xff1a;通过手指滑动列表&#xff0c;控制位置显示效果为&#xff1a;不论列表在什么位置下滑时下图粉色位置布局显示&#xff0c;手指上滑时下图粉色位置布局隐藏。 效果&#xff1a; 原理分析&…

helm与k8s

文章目录 一、helm二、K8S/K3S1.K8S基本组件1.1 资源对象1.2 核心组件1.3典型的创建 Pod 的流程1.4 Kubernetes 多组件之间的通信原理 2. YAML 文件2.1 Maps2.2 Lists2.3 使用 YAML 创建 Pod2.4 创建 Deployment 3.用 kubeadm 搭建集群环境3.1 环境3.2 镜像&#xff08;如果你的…

江南大学酒科技馆OLED透明屏项目方案

一、项目概述 本项目旨在为无锡江南大学酒科技馆提供OLED透明屏解决方案&#xff0c;通过安装2x2的OLED透明屏&#xff0c;为参观者带来全新的视觉体验&#xff0c;同时提升酒科技馆的展示效果与科技感。 二、产品选型 本项目选用OLED透明屏&#xff0c;其具有高透明度、高对比…

低温漂、低功耗电压基准,用在精密数据采集系统,供电类设备,工业仪表,测试设备等领域

MSR015/MSR025 是低温漂、低功耗、高精度 CMOS 电压基准&#xff0c; 具有 0.05% 初始精度、低功耗特点。该器件的低输出电压迟滞和低长期输出电压 漂移特性&#xff0c;进一步提高稳定性和系统可靠性。 此外&#xff0c;器件的小尺寸和低运行 电流特性使其非常适合便携…

Leetcode面试经典150_Q122买卖股票的最佳时机II

题目&#xff1a; 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买&#xff0c;然后在 同一天 出售。 返回 你能获得的 最大…

达梦备份与恢复

达梦备份与恢复 基础环境 操作系统&#xff1a;Red Hat Enterprise Linux Server release 7.9 (Maipo) 数据库版本&#xff1a;DM Database Server 64 V8 架构&#xff1a;单实例1 设置bak_path路径 --创建备份文件存放目录 su - dmdba mkdir -p /dm8/backup--修改dm.ini 文件…