问题描述
  给定一个长度为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

 
思路
   这题暴力复杂度为$O(n^2)$,无法通过所有数据。我提供两种思路来解决这个问题:
  首先求出数组的前缀和并对k取余。前缀和是数组的前j个元素的和$\sum\limits_{i = 1}^j {a[i]}$。假设经过求余得到的数组为$\{ {y_1},{y_2},...,{y_n}\}$,比如样例中的$y$数组为{1,1,0,0,1}。
 
  1.对于数组$y$,如果${y_i} = {y_j}(i < j)$,那么$\sum\limits_{t = i + 1}^j {{t_i}}$必定是$k$的倍数。设$c_x$表示数组$y$等于$x$的元素个数,但是要特别注意等于0的情况,要让$c_0+1$!!
  答案就是$\sum\limits_{i = 0}^{k - 1} {{c_i} \times ({c_i} - 1)/2}$。
 
  2.在计算数组$y$同时,第$i$个元素能和前面的元素构成$c_{y_i}-1$个k倍区间,这样一直计算下去就是答案。
 
  总而言之,这两种思路都是基于余数相同区间和必为k的倍数来实现的。

AC代码
  

 #include <stdio.h>
#include <string.h>
const int maxn = + ;
typedef long long LL;
int a[maxn], cnt[maxn];
int n, k;
int main() {
while(scanf("%d%d", &n, &k) == ) {
int sum = ;
LL ans = ;
memset(cnt, , sizeof(cnt));
for(int i = ; i < n; i++) {
scanf("%d", &a[i]);
sum = (sum + a[i] % k) % k;
cnt[sum]++;
}
cnt[]++;
for(int i = ; i < k; i++) {
ans += (1LL * cnt[i] * (cnt[i]-)) / ;
}
printf("%lld\n", ans);
}
return ;
}
 
 如有不当之处欢迎指出!
 
 
 

第八届蓝桥杯省赛 K倍区间的更多相关文章

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

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

  2. Java实现蓝桥杯 历届试题 k倍区间

    历届试题 k倍区间 时间限制:2.0s 内存限制:256.0MB 问题描述 给定一个长度为N的数列,A1, A2, - AN,如果其中一段连续的子序列Ai, Ai+1, - Aj(i <= j) ...

  3. 2017年第八届蓝桥杯省赛试题(JavaA组)

    1.结果填空 (满分5分)2.结果填空 (满分11分)3.结果填空 (满分13分)4.结果填空 (满分17分)5.代码填空 (满分7分)6.代码填空 (满分9分)7.程序设计(满分19分)8.程序设计 ...

  4. 2017年第八届蓝桥杯国赛试题(JavaA组)

    1.结果填空 (满分19分)2.结果填空 (满分47分)3.代码填空 (满分21分)4.程序设计(满分35分)5.程序设计(满分79分)6.程序设计(满分99分) 1.标题:图书排列 将编号为1~10 ...

  5. Java实现第八届蓝桥杯国赛 数字划分

    标题:数字划分 w星球的长老交给小明一个任务: 1,2,3-16 这16个数字分为两组. 要求: 这两组数字的和相同, 并且,两组数字的平方和也相同, 并且,两组数字的立方和也相同. 请你利用计算机的 ...

  6. 第八届蓝桥杯省赛17【java B组】第一题

    1,标题: 购物单    小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞.    这不,XX大促销又来了!老板夫人开出了长长的购 ...

  7. 第八届蓝桥杯国赛java B组第三题

    标题:树形显示 对于分类结构可以用树形来形象地表示.比如:文件系统就是典型的例子. 树中的结点具有父子关系.我们在显示的时候,把子项向右缩进(用空格,不是tab),并添加必要的连接线,以使其层次关系更 ...

  8. 第八届蓝桥杯省赛C/C++ A组第8题 包子凑数

    参考了http://blog.csdn.net/y1196645376/article/details/69718192 思路: 数论+完全背包. 实现: #include <iostream& ...

  9. 第八届蓝桥杯省赛C/C++ A组第4题 方格分割

    参考了http://blog.csdn.net/y1196645376/article/details/69718192,这个大哥的思路很巧妙. 思路: dfs. 实现: #include <i ...

随机推荐

  1. 初始easyUI

    1 easyUI布局 <%@ page language="java" contentType="text/html; charset=UTF-8" pa ...

  2. English Time And Date

    What's the Time in English? Explanation There are two common ways of telling the time. Formal but ea ...

  3. Java学习:注解,反射,动态编译

    狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! Java学习:注解,反射,动态编译 Annotation 注解  什么是注解 ? Annotat ...

  4. vue 点击弹窗外框关闭弹框

    https://blog.csdn.net/zjw0742/article/details/77822777 ready() { document.addEventListener('click', ...

  5. https SSL主流数字证书都有哪些格式(转载)

    主流数字证书都有哪些格式? 一般来说,主流的Web服务软件,通常都基于两种基础密码库:OpenSSL和Java. Tomcat.Weblogic.JBoss等,使用Java提供的密码库.通过Java的 ...

  6. 初学Vue 遇到Module not found:Error:Can`t resolve 'less-loader' 问题

    学习vue时,导入一个子组件时遇到Module not found:Error:Can`t resolve 'less-loader' 问题,实际上时在子组件中的样式里加了这么个代码 <styl ...

  7. python框架之Django(13)-admin组件

    使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTALLED_APPS ...

  8. 你不知道的JavaScript-2.词法作用域

    考虑以下代码: function foo(a) { var b = a * 2; function bar(c) { console.log( a, b, c ); } bar( b * 3 ); } ...

  9. InternalError (see above for traceback): Blas GEMM launch failed

    训练BiLSTM模型的时候报错: InternalError (see above for traceback): Blas GEMM launch failed : a.shape=(32, 200 ...

  10. arithmetic-02

    Java collection API 中实现的表ADT: collection<E>接口实现继承iterable<E>接口,实现iterable接口的类可以使用增强for循环 ...