2017藍橋杯 k倍區間

2021-09-11 18:53:24 字數 961 閱讀 1899

題目描述:

給定乙個長度為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解題思路:本題嘛,我用sum[i]來存前 i 個元素的和mod k 的結果,然後呢f[ i ] 表示sum陣列中有多少個元素值是 i 。很顯然,當sum[ i ] 為 0 時,代表[0 , i ] 為 k 的倍數。另外的,當且僅當sum[ i ] == sum[ j ] 時,[ i , j ]才是 k 的倍數。(證明 ? 顯而易見嘛。)所以最終答案就是f[ 0 ] + f[ i ] 的排列數,0 <= i <= k-1。

#include#include#includeusing namespace std;

int n,k;

const int maxn = 100100;

int f[maxn];

int a[maxn];

int sum[maxn];

long long jie(int x)

void solve()

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

}int main()

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

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

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