2017藍橋杯省賽第十題 k倍區間

2021-10-24 20:05:31 字數 1109 閱讀 2307

給定乙個長度為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倍區間的數目。

例如,輸入:

521

2345

輸出:

6
思路:字首和加列舉列舉右區間的貢獻即可。

#include

using

namespace std;

typedef

long

long ll;

const

int n=

1e5+5;

int sum[n]

,cnt[n]

,n,k;

ll ans;

intmain()

printf

("%lld\n"

,ans)

;return0;

}

做完乙個題就要思考一下:遇到這種型別的題,我們該往那哪個方向去考慮呢?

像這樣有關區間和的問題,我們第一時間就要想到字首和思想,因為字首和可以求出任意區間和,而對於統計區間個數的問題,我們通常採用列舉每個區間端點的貢獻(有可能是左端點,有可能是右端點),然後對所有區間貢獻求和即可。

而這一題,恰好利用兩個不同字首和mod

kmod\ k

modk

後相等,則相減mod

kmod\ k

modk

就等於0 的思想來統計個數,此外我們需要注意的是此題的正確性是因為a

i>

0a_i>0

ai​>

0,如果有ai=

0a_i=0

ai​=

0的情況則需要討論,因為 0(m

odk)

=0

0\pmod=0

0(modk

)=0。

2017藍橋杯第十題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。以下 n 行每行包含乙個整數 ai。輸出格式 輸出乙個...

藍橋杯第二期模擬賽第十題

覺得網上的答案怪怪的 問題描述 小藍在乙個 n 行 m 列的方格圖中玩乙個遊戲。開始時,小藍站在方格圖的左上角,即第 1 行第 1 列。小藍可以在方格圖上走動,走動時,如果當前在第 r 行第 c 列,他不能走到行號比 r 小的行,也不能走到列號比 c 小的列。同時,他一步走的直線距離不超過3。例如,...