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

k倍区间c++

题目

输入样例:

5 2
1
2
3
4
5

输出样例:

6
思路

本题默认所有读者已经理解了如何求前缀和。

        可以利用双层循环分别枚举左端点和右端点即可枚举完所有区间,而对于每个区间,利用一维前缀和判断它是否是一个k倍区间,是的话答案数+1,但时间复杂度为O(10^10),超时。代码如下:

//s[]为前缀和数组, res 为总区间数
for (int r = 1; r <= n; r ++)
for (int l = 1; l <= r; l ++)
{if ((s[r] - s[l - 1]) % k == 0)res ++;
}

        实际上,这个双层循环可以理解为,在右端点r固定,l 在 0 ~ r - 1 之间变化的情况下,可以找到多少个满足 (s[r] - s[l]) % k == 0的区间,判断条件变换一下得:(s[r] % k - s[l] % k) % k == 0,即在 0 ~ r - 1 之间能找到有多少个s[l] % k 等于 s[r] % k,使得[l, r]构成k倍区间。而 s[r] % k的个数可以在r从前往后遍历过程中用一个数组cnt统计出来,cnt[i]代表 s[r]%k余数等于i的个数。

        特别注意,当s[i] % k 等于0时,说明s[i]本身即可构成一个k倍区间,因此cnt[0]要预置为1,这样当遇到第一个s[i] % k==0时就可以统计到答案res中去了。

代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e5 + 10;
LL a[N], cnt[N];int main()
{ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);int n, k;cin >> n >> k;//求前缀和for (int i = 1; i <= n; i ++){cin >> a[i];a[i] += a[i - 1];}LL res = 0;cnt[0] = 1;for (int i = 1; i <= n; i ++){res += cnt[a[i] % k] ++;}cout << res;return 0;
}

相关文章:

  • spm用于颅骨去除和配准
  • 电脑的“32位”和“64位”是什么?
  • python爬虫(2)
  • java的参数传递机制(引用类型)
  • C++初阶 类(上)
  • 点云PLY、PCD、OBJ、TXT文件互相转换
  • 优思学院|质量和企业的盈利能力有何关系?
  • 超短代码实现!!基于langchain+chatglm3+BGE+Faiss创建拥有自己知识库的大语言模型(持续更新)本人python版本3.11.0 windows环境
  • Enzo Life Sciences Cortisol(皮质醇) ELISA kit
  • 阿里云服务器使用教程_2024建站教程_10分钟网站搭建流程
  • 通义千问1.5(Qwen1.5)大语言模型在PAI-QuickStart的微调与部署实践
  • selenium 4.17正式发布,这几项更新值得关注
  • Python测试框架pytest介绍用法
  • 安卓面试题 11-20
  • Unity 动画(旧版-新版)
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 07.Android之多媒体问题
  • C语言笔记(第一章:C语言编程)
  • js正则,这点儿就够用了
  • Linux下的乱码问题
  • Vue实战(四)登录/注册页的实现
  • 编写符合Python风格的对象
  • 二维平面内的碰撞检测【一】
  • 好的网址,关于.net 4.0 ,vs 2010
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 目录与文件属性:编写ls
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 小程序01:wepy框架整合iview webapp UI
  • 鱼骨图 - 如何绘制?
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 1.Ext JS 建立web开发工程
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #LLM入门|Prompt#3.3_存储_Memory
  • #pragma预处理命令
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)springboot教学评价 毕业设计 641310
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)Sql Server 保留几位小数的两种做法
  • (转)用.Net的File控件上传文件的解决方案
  • (转载)深入super,看Python如何解决钻石继承难题
  • (转载)虚函数剖析
  • .Family_物联网
  • .gitignore文件---让git自动忽略指定文件
  • .NET 分布式技术比较
  • .Net 高效开发之不可错过的实用工具
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET学习教程二——.net基础定义+VS常用设置
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • [ SNOI 2013 ] Quare