藍橋杯第八屆B組 k倍區間

2021-10-25 17:56:08 字數 921 閱讀 8597

給定乙個長度為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資源約定:

峰值記憶體消耗(含虛擬機器) < 256m

cpu消耗 < 2000ms

這一題首先可以想到字首和,但單純的用字首和相減獲得區間判斷時間上肯定是超的。

乙個區間可以表示為sum[i] - sum[j],那麼判斷是不是 k 的倍數就變成判斷 ( sum[i] - sum[j] )% k 是否為零,是的話就是 k 倍區間

( sum[i] - sum[j] )% k 可擴充套件為 sum[i] % k 是否等於 sum[j] % k,那麼如果有一對sum相等,便多了乙個 k 倍區間

定義乙個 res 陣列把相同的 sum % k 記錄下來

#include

using

namespace std;

typedef

long

long ll;

const

int n =

100010

;int a[n]

;ll sum[n]

;ll res[n]

;int

main()

cout << ans + res[0]

;//res[0]是單個字首和就滿足情況的個數

return0;

}

第八屆藍橋杯k倍區間

題目 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...

第八屆藍橋杯 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 倍區間

問題描述 給定乙個長度為 n 的數列,a1,a2,an,如果其中一段連續的子串行 ai,ai 1,aj 之和是 k 的倍數,我們就稱這個區間 i,j 是k倍區間,你能求出數列中總共有多少個 k 倍區間嗎?輸出格式 第一行包含兩個整數 n 和 k。1 n,k 100000 以下 n 行每行包含乙個整數...