藍橋杯2017初賽 k倍區間 字首和

2021-10-19 02:50:33 字數 865 閱讀 3186

題目描述

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

樣例輸出

6

解題思路:

我們拿這個數論為4 4 4 4 ,模擬一下for迴圈的過程,就知道為什麼這樣寫了,很巧妙!!!

**如下:

#include

using

namespace std;

typedef

long

long ll;

const

int n =

100010

;ll cnt[n]

,s[n]

;int

main()

ll res =0;

cnt[0]

=1;for

(int i =

1;i<=n;i++

) cout<

return0;

}

藍橋杯2017初賽 k倍區間 (字首和)

已知a那麼我們就可以將字首和模k的值為0,1,2 k 1的區間數分別求出來,然後分別計算。例如字首和模k為1的區間有x個。那麼就可以產生c x,2 個k倍區間 即x x 1 2個 然後對0 k 1分別進行此操作並求和。此題的關鍵是要知道 當兩個數的餘數相同時,這兩個數的差的餘數為0!include ...

藍橋杯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 10...

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