藍橋杯之k倍區間

2021-07-30 07:39:58 字數 913 閱讀 8181

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

2  3 

4  5 

程式應該輸出:6

#include #include #include #include #include #include #include #include #include using namespace std;

typedef long long ll;

ll bk[100010]= ;

ll arr[100010];

ll k,n;

int main()

for(int i = 0 ; i < n ; i ++)

printf("%lld\n",sum+bk[0]);//bk[0]就是從arr[0]加到某個數的和 餘k等於0(也就是剛好能整除k),所以有幾個,就加上幾個;

return 0;

}

就拿這個測試來說,經過第乙個for迴圈後 arr陣列最後變成了 1  1  0  0  1;

第二個for迴圈中的bk陣列可以理解為sum加上arr[i]曾出現

得次數,注意:我說的是已經出現過了

的次數,不包括現在出現的這次;

比如 第乙個1的時候1出現過了0次,而不是1次;第二個1的時候1出現了1次,而不是2次;第乙個0出現了0次,以此類推

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