歷屆真題 k倍區間 (字首和優化計數)

2021-08-16 06:01:57 字數 553 閱讀 3772

傳送門

思路:最簡單的方法,先維護乙個字首和,然後o(n^2)列舉兩個起點求出區間和判斷是否%k == 0 統計個數.n <= 100000,這種方法想的滿分是不可能的,但是比賽中不會做騙分也是可取的.

我們來想一下假設區間此時為[i,j],那麼區間和可表示為 sum[j] - sum[i-1],所求為 (sum[j] - sum[i-1])%k == 0. 我們可以得到 當sum[j] % k == sum[i-1] % k 時 ,上式一定成立.所以我們只需要用陣列記錄一下 sum % k的個數分別為多少個即可. 另外 % k ==0 的也要加到答案中去.

#includeusing namespace std;

typedef long long ll;

const int maxn = 1e5+5;

ll num[maxn],sum[maxn];

int n,k;

int main()

printf("%lld\n",ans + num[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 10000...

K倍區間 字首和

第二天叫醒我的不是鬧鐘,是夢想!題目描述 給定乙個長度為n的數列,a1,a2,an,如果其中一段連續的子串行ai,ai 1,aj i j 之和是k的倍數,我們就稱這個區間 i,j 是k倍區間。你能求出數列中總共有多少個k倍區間嗎?輸入 第一行包含兩個整數n和k。1 n,k 100000 以下n行每行...

k倍區間(字首和)

題目如下 解題思路 這個思路實在太強了 1.sum i 代表a 0 a i 1 的和,那麼sum r sum l 1 即為區間 l,r 之間的和,即求 sum r sum l 1 k 0,即求sum r k sum l 1 k 即先求出字首和。在求出字首和的同時 k。2.有的人可能對 的最後一段不太...