給定乙個長度為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。例如,...