17年藍橋杯 k倍區間

2021-08-17 18:37:42 字數 924 閱讀 5646

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

2  3  

4  5  

程式應該輸出:

6資源約定:

峰值記憶體消耗(含虛擬機器) < 256m

cpu消耗  < 2000ms

解題思路:

前 i 項之和%k 與 前 j 項之和%k相等的話,那麼[i - j ] 之間和一定是k的倍數

#include #define m 1000002

int num[m]=;

int mod[m]=; //記錄每位餘數

int count[m]=; //記錄對k取餘後,每個餘數出現的次數

int getc(int num);

int main(void)

sum = count[0]; //當餘數為0,則說明正好是k的整數倍,sum初始化為count[0]

//比如例題[1,3]是一種情況,正好從第一位疊加到第三位是2的倍數,而疊加到第三位的和對2取餘正好是0.

for(i=0;iprintf("%ld",sum);

return 0;

}//求num個數有多少個兩兩組合,即c(2,num);

int getc(int num)

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

藍橋杯 K倍區間

時間限制 2.0s 記憶體限制 256.0mb 給定乙個長度為n的數列,a1,a2,an,如果其中一段連續的子串行ai,ai 1,aj i j 之和是k的倍數,我們就稱這個區間 i,j 是k倍區間。你能求出數列中總共有多少個k倍區間嗎?輸入格式 第一行包含兩個整數n和k。1 n,k 100000 以...

藍橋杯 k倍區間

暴力模擬 雙迴圈肯定超時了,需要找到數字間的規律進行優化 includeusing namespace std typedef long long ll define maxn 100005 sum r sum l 1 就是區間 l,r 的和。區間 l,r 的和是k的倍數即 sum r sum l ...