列舉所有區間是o(n^2) 這是為了遍歷所有區間 但是這個過程我們做了很多無用功
只需要遍歷一遍 這是為了遍歷每個k倍區間的右端點 而左端點可以通過之前的一些結果得出
遍歷過程中 對於每個i 都有book[sum[i]%k]++ 這樣就知道從 1 到 (i-1) 有多少個區間和餘數和 [1,i]相同的區間 兩者相減即是乙個k倍區間
可以這樣理解 每個k倍區間[i,j] 只要[1,j]與[1,j]模k的餘數相同 都可以通過[1,j]與[1,i]做差得到
#include using namespace std;
#define ll long long
ll num[100010],book[100010];
ll k;
int n;
int main()
memset(book,0,sizeof(book));
sum=0,ans=0;
for(i=1;i<=n;i++)
printf("%i64d\n",ans);
}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 10000...
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 10...