k倍區間 藍橋真題

2021-08-16 13:01:36 字數 564 閱讀 3815

列舉所有區間是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...