题目描述

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

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

输入格式
第一行包含两个整数 N 和 K。

以下 N 行每行包含一个整数 Ai。

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

数据范围
1≤N,K≤100000,
1≤Ai≤100000

样例

5 2
1
2
3
4
5

输出
6

关于cnt[0]赋值为1的解释

 在处理cnt[a[i]%k] == 0 的情况,因为mod k ==0 此时他自身就是一个k倍区间,但
我们在程序中,是按照两个一组来进行配对的,所以需要重新考虑。将cnt[0]赋值为1的初始化,因为res每次需要加cnt[0],与每一个元素进行组合,
这样每次res+cnt[0]就会多加一个1,这个1可以视为这一次循环中,新的符合a[i]%k==0
的一个前缀和。这样就可以补充它本身是一个k倍区间的情况了。

做法解析

 前提:数组为前缀和cnt[i]可以视为取余结果为i的区间 的个数根据题意得到:(a1-b1)%k==0
变形:a1%k-b1%k==0 a1%k == b1%k
所以只要任意两个前缀和 mod的值相等就可以了
对于其他的取余结果为非0的结果来说需要两个区间才能组合。

C++ 代码

//k倍区间#include<bits/stdc++.h>using namespace std;const int N = 100010;long long a[N], cnt[N];long long res = 0;
int n, k;int main(void){cin >> n >> k;for(int i=1; i<=n; i++){cin >> a[i];a[i] += a[i-1];}cnt[0] = 1;for(int i=1; i<=n; i++){res += cnt[a[i]%k];cnt[a[i]%k] ++ ;}cout<< res;system("pause");
}

1230k倍区间,关于cnt[0]赋值为1的解释相关推荐

  1. 东华oj系统 52 k倍区间

    52 k倍区间 作者: Turbo时间限制: 2S章节: 枚举 问题描述 : 给定一个长度为N的数列,A1, A2, - AN,如果其中一段连续的子序列Ai, Ai+1, - Aj(i <= j ...

  2. AcWing 1230. K倍区间

    首先我们要知道,(a-b)%c=0等价于a%c=b%c 给定一个长度为 N 的数列,A1,A2,-AN,如果其中一段连续的子序列 Ai,Ai+1,-Aj 之和是 K 的倍数,我们就称这个区间 [i,j ...

  3. 蓝桥杯2017初赛-k倍区间-前缀和

    题目描述 给定一个长度为N的数列,A1, A2, - AN. 如果其中一段连续的子序列Ai, Ai+1, - Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间. 你能求 ...

  4. 2017蓝桥杯省赛---java---B---10(k倍区间)

    题目描述 标题: k倍区间给定一个长度为N的数列,A1, A2, - AN,如果其中一段连续的子序列Ai, Ai+1, - Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍 ...

  5. 【蓝桥杯 - 练习】k倍区间(思维,数组)

    题干: http://lx.lanqiao.cn/problem.page?gpid=T444 问题描述 给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1 ...

  6. 蓝桥杯第八届省赛JAVA真题----k倍区间

    标题: k倍区间 给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍 ...

  7. 第八届蓝桥杯第十题 k倍区间

    给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间.  你能求出 ...

  8. Sasha and a Bit of Relax K倍区间 (前缀和异或 前缀和计数 思维)

    (29条消息) CodeForces - 1109A Sasha and a Bit of Relax(思维+异或和,好题)_Frozen_Guardian的博客-CSDN博客 Sasha and a ...

  9. 离散数学 习题篇 —— k倍区间

    题目: 给定一个长度为N的数列A​1, A2, ⋯, AN, 如果其中一段连续的子序列Ai, Ai+1, ⋯, Aj(i≤j)之和是K的倍数,我们就称这个区间[i,j]是K倍区间. 你能求出数列中总共 ...

最新文章

  1. 头条hr就是刚:拒绝Offer或者放弃入职等于永远跟头条没关系!
  2. 计算机语言翻译的情诗,聂鲁达情诗翻译
  3. 斯坦福大学深度学习与自然语言处理第四讲:词窗口分类和神经网络
  4. System Center 2012与vCenter Operations 产品功能对比
  5. Linux 下升级 python2 到python3
  6. InfoComm China 2016“全球新产品发布活动” —— 汇聚众多革新设备及技术
  7. navicat工具查看MySQL数据库_表占用容量_占用空间是多少MB---Linux工作笔记048
  8. C#的TextBox控件输入测试-只允许输入数字的测试:
  9. linux 配置compoer
  10. android跑马灯效果横向,Android TextView 横向滚动(跑马灯效果)
  11. 南大通用数据库(2):客户端的使用(GBase 企业管理器的使用)
  12. 手机word文档怎么恢复
  13. 咬肌边上有个滑动疙瘩_腮帮子有个滑动的疙瘩是怎么回事
  14. 用python制作二维码_用python做一个可视化生成二维码的工具
  15. 中信涂猪android抓包,玩卡计划 篇二:中信《鼠来宝》规则攻略,珠光宝气之后的活动!还记得去年的涂猪吗?...
  16. Android实现手写板和涂鸦功能
  17. 为什么我的MATLAB激活成功后打开还是激活界面!
  18. 与机器人chatGPT聊聊软件测试的热门话题
  19. 毕业设计 机器视觉 opencv 深度学习 驾驶人脸疲劳检测系统 -python
  20. 广义精确匹配-Coarsened Exact Matching (CEM)

热门文章

  1. 建行与爱赏合作推出建行爱赏卡 刷卡消费“抢红包”
  2. OpenCV-Python教程#5-颜色和颜色检测
  3. 完美解决html表格表头固定存在的问题
  4. 《编写有效用例》读书笔记(6)——前置条件、触发事件和保证
  5. ChatGPT介绍世界杯历史与编写足球游戏python程序
  6. java日期转字符串_Java时间日期格式转换Date转String和String转Date
  7. linux extended格式,Linux 下文件Non-ISO extended-ASCII编码问题
  8. 渗透测试-文件上传/下载/包含
  9. 淘宝吱口令效果实现,获取系统剪贴板内容
  10. 表单实现登录注册功能