K倍區間 字首和

2021-10-01 02:32:54 字數 916 閱讀 7857

第二天叫醒我的不是鬧鐘,是夢想!

題目描述

給定乙個長度為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 2123

45樣例輸出6提示

無利用字首和思想 (sum[r]-sum[l-1])%k0 相當於 (sum[r]%k)(sum[l-1]%k)

所以統計一下各字首和%k出現的次數。最後我們必須要加上cnt[0]。因為有單個k的倍數沒有算上。

比如 6 2

1 2 3 4 5 6

字首和 1 3 6 10 15 21只計算了這些對答案的貢獻。但是沒有計算2,4這個數。6已結在裡面了

#include.h>

using namespace std;

typedef long long ll;

const int n

=1e5

+1000

;ll res[n]

;int a[n]

;ll vis[n]

;int main()

ll ans=0;

for(int i=

1;i<=n;i++

) cout<<}

k倍區間(字首和)

題目如下 解題思路 這個思路實在太強了 1.sum i 代表a 0 a i 1 的和,那麼sum r sum l 1 即為區間 l,r 之間的和,即求 sum r sum l 1 k 0,即求sum r k sum l 1 k 即先求出字首和。在求出字首和的同時 k。2.有的人可能對 的最後一段不太...

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 a...

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 輸出乙...