1230k倍区间,关于cnt[0]赋值为1的解释
题目描述
给定一个长度为 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的解释相关推荐
- 东华oj系统 52 k倍区间
52 k倍区间 作者: Turbo时间限制: 2S章节: 枚举 问题描述 : 给定一个长度为N的数列,A1, A2, - AN,如果其中一段连续的子序列Ai, Ai+1, - Aj(i <= j ...
- AcWing 1230. K倍区间
首先我们要知道,(a-b)%c=0等价于a%c=b%c 给定一个长度为 N 的数列,A1,A2,-AN,如果其中一段连续的子序列 Ai,Ai+1,-Aj 之和是 K 的倍数,我们就称这个区间 [i,j ...
- 蓝桥杯2017初赛-k倍区间-前缀和
题目描述 给定一个长度为N的数列,A1, A2, - AN. 如果其中一段连续的子序列Ai, Ai+1, - Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间. 你能求 ...
- 2017蓝桥杯省赛---java---B---10(k倍区间)
题目描述 标题: k倍区间给定一个长度为N的数列,A1, A2, - AN,如果其中一段连续的子序列Ai, Ai+1, - Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍 ...
- 【蓝桥杯 - 练习】k倍区间(思维,数组)
题干: http://lx.lanqiao.cn/problem.page?gpid=T444 问题描述 给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1 ...
- 蓝桥杯第八届省赛JAVA真题----k倍区间
标题: k倍区间 给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍 ...
- 第八届蓝桥杯第十题 k倍区间
给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间. 你能求出 ...
- Sasha and a Bit of Relax K倍区间 (前缀和异或 前缀和计数 思维)
(29条消息) CodeForces - 1109A Sasha and a Bit of Relax(思维+异或和,好题)_Frozen_Guardian的博客-CSDN博客 Sasha and a ...
- 离散数学 习题篇 —— k倍区间
题目: 给定一个长度为N的数列A1, A2, ⋯, AN, 如果其中一段连续的子序列Ai, Ai+1, ⋯, Aj(i≤j)之和是K的倍数,我们就称这个区间[i,j]是K倍区间. 你能求出数列中总共 ...
最新文章
- 头条hr就是刚:拒绝Offer或者放弃入职等于永远跟头条没关系!
- 计算机语言翻译的情诗,聂鲁达情诗翻译
- 斯坦福大学深度学习与自然语言处理第四讲:词窗口分类和神经网络
- System Center 2012与vCenter Operations 产品功能对比
- Linux 下升级 python2 到python3
- InfoComm China 2016“全球新产品发布活动” —— 汇聚众多革新设备及技术
- navicat工具查看MySQL数据库_表占用容量_占用空间是多少MB---Linux工作笔记048
- C#的TextBox控件输入测试-只允许输入数字的测试:
- linux 配置compoer
- android跑马灯效果横向,Android TextView 横向滚动(跑马灯效果)
- 南大通用数据库(2):客户端的使用(GBase 企业管理器的使用)
- 手机word文档怎么恢复
- 咬肌边上有个滑动疙瘩_腮帮子有个滑动的疙瘩是怎么回事
- 用python制作二维码_用python做一个可视化生成二维码的工具
- 中信涂猪android抓包,玩卡计划 篇二:中信《鼠来宝》规则攻略,珠光宝气之后的活动!还记得去年的涂猪吗?...
- Android实现手写板和涂鸦功能
- 为什么我的MATLAB激活成功后打开还是激活界面!
- 与机器人chatGPT聊聊软件测试的热门话题
- 毕业设计 机器视觉 opencv 深度学习 驾驶人脸疲劳检测系统 -python
- 广义精确匹配-Coarsened Exact Matching (CEM)
热门文章
- 建行与爱赏合作推出建行爱赏卡 刷卡消费“抢红包”
- OpenCV-Python教程#5-颜色和颜色检测
- 完美解决html表格表头固定存在的问题
- 《编写有效用例》读书笔记(6)——前置条件、触发事件和保证
- ChatGPT介绍世界杯历史与编写足球游戏python程序
- java日期转字符串_Java时间日期格式转换Date转String和String转Date
- linux extended格式,Linux 下文件Non-ISO extended-ASCII编码问题
- 渗透测试-文件上传/下载/包含
- 淘宝吱口令效果实现,获取系统剪贴板内容
- 表单实现登录注册功能