蓝桥杯 k倍区间(前缀和)
2017-04-26 19:17
211 查看
标题: k倍区间 给定一个长度为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 1 2 3 4 5 程序应该输出: 6 资源约定: 峰值内存消耗(含虚拟机) < 256M CPU消耗 < 2000ms 请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。 注意: main函数需要返回0; 只使用ANSI C/ANSI C++ 标准; 不要调用依赖于编译环境或操作系统的特殊函数。 所有依赖的函数必须明确地在源文件中 #include <xxx> 不能通过工程设置而省略常用头文件。 提交程序时,注意选择所期望的语言类型和编译器类型。
tips:(sum[r]-sum[l-1])%k==0 <==> sum[l-1]%k==sum[r]
#include<iostream> #include<cstring> using namespace std; int n,k; int a[110000],cnt[110000]; long long sum[110000]; int ans; int main() { scanf("%d %d",&n,&k); for(int i=1;i<=n;i++) { scanf("%d",a+i); sum[i]=(a[i]+sum[i-1])%k;//统计前缀和并不断进行取模 } for(int i=1;i<=n;i++) { ans+=(cnt[sum[i]]++); } printf("%d\n",ans+cnt[0]);//加上cnt[0]的目的是存在区间长度为1的数据能整除k return 0; }
相关文章推荐
- 2017第八届蓝桥杯C/C++第十题 - k倍区间 - 前缀和
- 蓝桥杯 k倍区间(前缀和)
- 第八届蓝桥杯 k倍区间(前缀和)
- 蓝桥杯-k倍区间【前缀和】
- 蓝桥杯 历届试题 k倍区间(同余定理、前缀和、组合)
- 蓝桥杯 PREV-40 k倍区间(前缀和)
- 2017蓝桥杯:k倍区间(前缀和)
- 蓝桥杯-K倍区间(前缀和) 分巧克力(二分)
- 蓝桥杯练习题--k倍区间(前缀和+组合数学)
- 蓝桥杯 历届试题 7.连号区间数
- K倍区间 java蓝桥杯
- 2017蓝桥杯B模拟题K倍区间
- HDU - 5776 sum/ 蓝桥杯省赛 K倍区间(抽屉原理)
- 蓝桥杯 ALGO-92 算法训练 前缀表达式
- 蓝桥杯- 区间k大数查询
- 蓝桥杯 历届试题 连号区间数
- 连号区间数 - 蓝桥杯
- 2013第四届蓝桥杯预赛试题本科c++前缀判断
- 蓝桥杯 历届试题 k倍区间
- 【codeforces 703 D】【离线询问 树状数组 前驱思想 前缀异或和】D. Mishka and Interesting sum【 区间内出现次数偶数的数的异或和】