k倍區間 (模運算 好題)

2021-09-13 09:47:33 字數 851 閱讀 8189

問題描述

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

45樣例輸出

資料規模和約定

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

cpu消耗 < 2000ms

思路:可以用字首和記錄到達這點的總和,那麼對於區間【l,r】的和就是 sum[ r ] - sum[ l ]。  我們計算的是區間和正好是k的倍數的個數 。也就是( sum[ r ] - sum[ l ] )% k == 0    ------>    sum[ r ] %k - sum[ l ]%k  ==0    --->    sum[ r ] %k == sum[ l ]%k

好了,公式推到這裡的時候這道題就已經ac了,book標記 累加即可。

**如下:

// 藍橋杯集訓五10.cpp

#include#define ll long long

using namespace std;

int sum[100010],book[100010];

int main()

printf("%lld\n",sum);

}

k倍區間 藍橋真題

列舉所有區間是o n 2 這是為了遍歷所有區間 但是這個過程我們做了很多無用功 只需要遍歷一遍 這是為了遍歷每個k倍區間的右端點 而左端點可以通過之前的一些結果得出 遍歷過程中 對於每個i 都有book sum i k 這樣就知道從 1 到 i 1 有多少個區間和餘數和 1,i 相同的區間 兩者相減...

k倍區間 2017真題

題目描述 給定乙個長度為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...

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 ...