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