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

2021-10-25 18:13:04 字數 777 閱讀 5593

已知a那麼我們就可以將字首和模k的值為0,1,2…k-1的區間數分別求出來,然後分別計算。例如字首和模k為1的區間有x個。那麼就可以產生c(x,2)個k倍區間(即x(x-1)/2個)。然後對0~k-1分別進行此操作並求和。

此題的關鍵是要知道:當兩個數的餘數相同時,這兩個數的差的餘數為0!!!

#include

#include

#include

#include

#include

#define ll long long

#include

#include

using

namespace std;

const

int maxn=

100005

;int a[maxn]

;int sum[maxn]

;int cnt[maxn]

;int

main()

for(

int i=

1;i<=n;i++

) ll ans=0;

for(

int i=

0;i) ans+

=cnt[0]

;///i,j相同時,即區間只是乙個值,這需要單獨加上

printf

("%lld\n"

,ans)

;}

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

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