题目描述

OJ地址 http://lx.lanqiao.cn/problem.page?gpid=T444

给定一个长度为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倍区间的数目。

样例输入1:

5 2
1
2
3
4
5

样例输出1:

6

思路:

假设前缀和数组为a,如果 a[i] % k == 1,a[j] % k == 1,那么i到 j-1肯定构成一个k倍区间了,a[i]和a[j]对k取模余数相同,那么他们两个做差的话,余数部分肯定减没了,剩下的部分一定是K的倍数。

用一个数组b来记录a[i]出现的次数,例如,之前a[i]出现了5次,那么第六次再出现a[i]的时候,第六次的这个a[i]可以和前边5个a[i]分别构成一个k倍区间,这就构成了5个了,然后b[a[i]]++,也就是记录a[i]出现的次数增加1次。

另外要注意的是,前缀和对k取模等于0的时候,比如a[i] % k == 0,有两种情况,第一种是i和前边说的一样,之前出现了几次0,就会构成几个k倍区间。另一种就是,a[i]本身就是一个k倍区间,即 数组中,前i个数加起来就是一个k倍区间。所以,遇到模k等于0的时候要在答案中多记录一次。

代码

#include <bits/stdc++.h>using namespace std;long long a[100005],sum[100005];
int n;int main(){int k;long long ans = 0;cin >> n >> k;for(int i = 1;i <= n; i++){long long s;scanf("%d",&s);sum[i] = (sum[i-1] + s) % k;if(sum[i] == 0) ans++;ans = ans + a[sum[i]];   // 这个余数,原来出现过5次,那又出现了的话(第六次),就可以构成5个k倍区间 a[sum[i]]++;    // 出现次数增加 }cout << ans << endl; return 0;
}

【前缀和】蓝桥杯试题 k倍区间相关推荐

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

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

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

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

  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. 第八届蓝桥杯第十题 k倍区间

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

  7. [蓝桥杯]K倍区间(c++超详解)

    资源限制 时间限制:1.0s 内存限制:256.0MB 给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍 ...

  8. 蓝桥杯java第八届第十题--k倍区间

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

  9. 蓝桥杯2017 B组C省赛真题 2017-10 k倍区间

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

最新文章

  1. JVM性能调优(转)
  2. leetcode题库--63不同路径 II
  3. JNI学习积累之三 ---- 操作JNI函数以及复杂对象传递
  4. Delphi 的绘图功能[2] - 入门
  5. Android NFC标签读写 配置 过滤器总结 各类NFC数据类型NfcA NfcB IsoDep MifareClassic读取
  6. 人人商城小程序下单付款报错:“服务器暂时无法处理您的请求,请稍后再试”
  7. 【UWB 定位】室内定位 三边定位算法
  8. 企业微信支付提示请在微信客户端打开链接_微信h5支付?
  9. 使用Kali Linux系统生成木马病毒并实现远程控制计算机
  10. Linux系统安装详解
  11. 微软苏州面经:前两面简单,三面困难
  12. 中台和低代码,“零和”还是“竞合”?
  13. 我是一个线程(转载自: IBM刘欣)
  14. 苹果手机发信息显示作为垃圾信息送达解决方法
  15. p10单元板c语言程序,[原创]P10单元板驱动程序
  16. echart绘制直方图+正态分布曲线
  17. 前端开发者如何构建UCD的中长期前端开发能力与团队
  18. du -sh查看隐藏文件的大小
  19. 如何理解host,Host是什么意思
  20. android 制作用户头像,Android实现带头像的用户注册页面

热门文章

  1. Oracle DBA-01_Oracle 11G R2 for Solaris 10(Spac)安装实施报告
  2. 一文详解肖特基二极管损坏的六大原因
  3. 大数据分析案例-基于决策树算法构建银行客户流失预测模型
  4. 程序猿生存指南-60 一晌贪欢
  5. 1411-喜闻乐见的a+b ZCMU
  6. 化纤与纺织技术杂志化纤与纺织技术杂志社化纤与纺织技术编辑部2022年第2期目录
  7. Matlab/Simulink中PMSM模型的反电动势系数和转矩系数
  8. Python对列表去重的多种方法(四种方法)
  9. 苹果试玩换个新id行不_关于更换苹果ID的事
  10. C++数组:猴子选大王