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