给定一个长度为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




程序应该输出:
6
资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗  < 2000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
注意:
main函数需要返回0;
只使用ANSI C/ANSI C++ 标准;
不要调用依赖于编译环境或操作系统的特殊函数。
所有依赖的函数必须明确地在源文件中 #include <xxx>
不能通过工程设置而省略常用头文件。
提交程序时,注意选择所期望的语言类型和编译器类型。
从别处看到的思路:
求区间[l,r]的和是k的倍数的个数。求区间和,我们可以通过前缀和来求出。我们规定sum[i]表示第1个元素到第i个元素的和。那么sum[r] - sum[l-1]就是区间[l,r]的和。区间[l,r]的和是k的倍数即(sum[r] - sum[l-1])%k == 0 即sum[r]%k == sum[l-1]%k
  那么,我们求出每个前缀和,在求的过程中取模,两个相等的前缀和就能组成一个k倍区间。我们可以在计算完前缀和以后,使用两层for循环来计数k倍区间的个数。但是由于数据量较大,这样是会超时的。那么我们是否能在计算前缀和的过程中来记录k倍区间的个数呢?
我们用一个数组cnt[i]表示当前位置之前,前缀和取模后等于i的个数。举个例子:
  数列 1 2 3 4 5   mod = 2
  对前1个数的和取模, 为1 之前有0个前缀和取模后为1,个数+0
  对前2个数的和取模, 为1 之前有1个前缀和取模后为1,个数+1
  对前3个数的和取模, 为0 之前有0个前缀和取模后为0, 个数+0
  对前4个数的和取模, 为0 之前有1个前缀和取模后为0,个数+1
  对钱5个数的和取模, 为1 之前有2个前缀和取模后为1,个数+2
  到目前为止ans = 4。但是ans应该等于6,因为这样计算后,我们漏掉了前i个数的和取模是k的倍数的情况,即[0,i]区间和是k的倍数,因此,我们要在ans = 4 的基础上 加上前缀和取模后为0的个数 即ans+2 = 6;
  1. #include <cstdio>
  2. #include <iostream>
  3. #include <map>
  4. #include <set>
  5. #include <vector>
  6. #include <cmath>
  7. #include <string>
  8. #include <cstring>
  9. #include <algorithm>
  10. #define LL long long
  11. #define MAXN  1000
  12. using namespace std;
  13. /*
  14. 前缀和
  15. */
  16. int sum[100001]; // sum[i] 前i个元素的和
  17. int num[100001];
  18. int cnt[100001];
  19. int n,k;
  20. LL ans = 0;
  21. int main(){
  22. //freopen("input.txt","r",stdin);
  23. memset(cnt, 0, sizeof(cnt));
  24. memset(sum, 0, sizeof(sum));
  25. scanf("%d%d",&n, &k);
  26. for(int i = 1; i <= n; i++){
  27. scanf("%d",&num[i]);
  28. sum[i] = (sum[i-1] + num[i])%k;
  29. ans += cnt[sum[i]];
  30. cnt[sum[i]]++;
  31. }
  32. printf("%lld\n",ans+cnt[0]);
  33. return 0;
  34. }
代码如下:

第八届蓝桥杯第十题 k倍区间相关推荐

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

    标题: 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蓝桥杯省赛---java---B---10(k倍区间)

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

  4. 【第八届蓝桥杯第七题日期问题】

    [第八届蓝桥杯第七题日期问题] Description 小明正在整理一批历史文献.这些历史文献中出现了很多日期.小明知道这些日期都在1960年1月1日至2059年12月31日.令小明头疼的是,这些日期 ...

  5. 第八届蓝桥杯第八题--包子凑数(C语言)

    第八届蓝桥杯第八题–包子凑数(C语言) 一.比赛题目 1.题目要求 小明几乎每天早晨都会在一家包子铺吃早餐.他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子.每种蒸笼都有非常多笼,可以认为 ...

  6. 第八届蓝桥杯-第四题方格分割

    标题:方格分割 6x6的方格,沿着格子的边线剪开成两部分.  要求这两部分的形状完全相同. 如图:p1.png, p2.png, p3.png 就是可行的分割法. 试计算:  包括这3种分法在内,一共 ...

  7. [蓝桥杯][2017年第八届真题]k倍区间(数学+思维)

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

  8. 蓝桥杯真题 k倍区间 c++代码实现 给定一个长度为 N 的数列,A1, A2, ··· AN,如果其中一段连续的子序列 Ai,Ai+1,⋯A j ​ ( i \leq ji≤j ) 之

    文章目录 题目描述 输入描述 输出描述 输入输出样例 示例 运行限制 代码 思路 题目描述 给定一个长度为 N 的数列,A1, A2, ···AN,如果其中一段连续的子序列 Ai,Ai+1, ···A ...

  9. 【每日蓝桥】52、一七年省赛Java组真题“K倍区间”

    你好呀,我是灰小猿,一个超会写bug的程序猿! 欢迎大家关注我的专栏"每日蓝桥",该专栏的主要作用是和大家分享近几年蓝桥杯省赛及决赛等真题,解析其中存在的算法思想.数据结构等内容, ...

最新文章

  1. springcloud feign 服务调用其他服务_springCloud微服务项目 构建公共的feign调用
  2. springMVC的使用
  3. echarts树状图点击展开子节点_CPU眼里的结构设备树节点及属性详解
  4. Asp.net Core中SignalR Core预览版的一些新特性前瞻,附源码(消息订阅与发送二进制数据)
  5. php根据id查找条件怎么写_thinkphp where()条件查询
  6. 进击的UI-------------------RAC
  7. 【踩坑经历】一次Asp.NET小网站部署踩坑和解决经历
  8. Web系统开发构架再思考-前后端的完全分离 MVVM
  9. c语言标准库assert,C 标准库 - assert.h
  10. IBM为私有云用户提供开源数据库访问
  11. LINUX移植——LED驱动移植
  12. 宁波保哥后院_如何抛出终极后院电影之夜
  13. [Python]利用python+ffmpeg合并B站视频及格式转换
  14. 国内it软件外包公司排行榜是怎么样的
  15. 佛青云多少输出才能过鸿蒙,细节需慎重 现阶段佛青云多种路线选择
  16. 嵌入式系统框架----硬件篇
  17. 刨根问底:linux中bash shell中SIGHUP和SIGTERM信号的处理
  18. ViTDet程序调用不了GPU全部内存,而且显示NVCC: not available
  19. 协作机器人市场现在状况如何?——探讨关于UR机器人的发展前景
  20. Ubuntu20.04 tcp调试工具mNetAssist安装

热门文章

  1. 使用AWS DMS 升级Postgre 10到12
  2. 包信封问题 以及 最长有序子序列问题
  3. 【李宏毅2020 ML/DL】P57 Unsupervised Learning - Linear Methods | PCA Matrix Factorization
  4. 【Computer Organization笔记01】计算机组成原理课程要求、计算机的层次结构、计算机的发展历史
  5. Debian 8 时间同步
  6. webapi mvc 基础
  7. php 格式化js文件,vscode编辑器在php文件中的html/js格式化解决方案
  8. cocos2d-x 动画工具 Flash2Cocos2d-x
  9. 如何使用 Visual C# 加密和解密文件
  10. c#图片处理之:在图片上打上文字