Pagini recente » Cod sursa (job #2409928) | Cod sursa (job #1354513) | Cod sursa (job #1210867) | Cod sursa (job #722087) | Cod sursa (job #2462674)
#include <bits/stdc++.h>
using namespace std;
const int N = 5 * 1e5;
vector <int> v[100005];
long long s;
int main()
{
freopen("divk.in", "r", stdin);
freopen("divk.out", "w", stdout);
int n, k, a, b, i, nr;
long long rez = 0;
scanf("%d%d%d%d", &n, &k, &a, &b);
for(i = 0; i < k; i++) v[i].push_back(0);
for(i = 1; i <= n; i++){
scanf("%d", &nr);
s = s + nr;
v[s % k].push_back(i);
int r, pas;
r = 0;
pas = 1 << 20;
while(pas){
if(r + pas < v[s % k].size() && v[s%k][r + pas] < i - b + 1)
r += pas;
pas >>= 1;
}
r++;
int st = r;
r = 0;
pas = 1 << 20;
while(pas){
if(r + pas < v[s % k].size() && v[s%k][r + pas] <= i - a + 1)
r += pas;
pas >>= 1;
}
int dr = r;
rez += (dr - st + 1);
}
printf("%d\n", rez);
return 0;
}