k倍區間 (抽屜原理)

2021-08-17 22:00:20 字數 878 閱讀 8622

**:

給定乙個長度為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分析:

1、因為(sum[r] - sum[l-1]) % k == 0,可推出sum[r] % k == sum[l - 1] % k.

2、因此,將字首和分別對k取模。

3、分別統計出取模後的各數字的個數。

#includeusing namespace std;

typedef long long ll;

const int maxn = 100000 + 10;

int sum[maxn];

int cnt[maxn];

int main()

sum[0] %= k;

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

ll ans = 0;

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

printf("%lld\n", ans + cnt[0]);

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

歷屆試題 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 ...

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