题解 1882: 蓝桥杯2017年第八届真题-k倍区间

来看看其他人写的题解吧!要先自己动手做才会有提高哦! 
返回题目 | 我来写题解

筛选

蓝桥杯2017年第八届真题-k倍区间 (Java代码)

摘要:解题思路:气死我了,写道一半,突然没网了,然后写的东西全不见了,生气!               这道题,暴力不可以,所以需要想办法。用数学思维来想一想                1,2,3,4……

蓝桥杯2017年第八届真题-k倍区间 (C++代码)

摘要:        前缀和对 K 取模,统计答案的时候就是前面有多少个前缀和与该位置前缀和 % K 下相等,这样相减之后这些区间和 % K 下等于 0,也就是 K 的倍数了,我用分块来维护(数据结构学傻了……

蓝桥杯2017年第八届真题-k倍区间-题解(C++代码)

思路:前缀和,用sum[i]表示前i项和,那么区间[l,r]的和就是sum[r]-sum[l-1],因为要是k的倍数,所以(sum[r]-sum[l-1])%k==0,整理一下就是sum[r]%k==sum[l-1]%k,所以统计让这个式子成立的项就好了。

蓝桥杯2017年第八届真题-k倍区间-题解(C++代码)

###解题思路:s[i]表示1~i的前缀和,每次累加i下标前,s[i]%k的余数的个数,就是一个k倍区间。这里有些难理解,例如:s[t]表示1~t的前缀和,他们模k的余数为p,那么当s[i](i>k)模k的余数也为p时,就证明t~i这一段和模k是等于0的,正好是k的倍数。

蓝桥杯2017年第八届真题-k倍区间

摘要:解题思路:   sum[i]表示前i项的和,如果(sum[j] - sum[i])%k ==0(i<=j),即sum[i]%k==sum[j]%k,则区间[i+1,j]之和是k的倍数,然后用sum[i……

1882: 蓝桥杯2017年第八届真题-k倍区间

摘要:解题思路:注意事项:1、数据比较多(n=1e5),建议用scanf读入2、最坏的情况前缀和是10万的平方,1e10,int最多2x10^9,开long long,ans也是3、时间复杂度->o(n^2……