Cod sursa(job #687949)
#include <cstdio>
#include <vector>
using std::vector;
int main()
{
freopen("divk.in","r",stdin);
freopen("divk.out","w",stdout);
int N,K,A,B;
scanf("%d%d%d%d",&N,&K,&A,&B);
int x;
vector<int > sum(N + 1);
sum[0] = 0;
for(int i = 1; i <= N; ++i)
{
scanf("%d",&x);
(sum[i] = sum[i - 1] + x) %= K;
}
vector<int> count(K,0); //nu am nevoie de hash deoarece cheile sunt maxim K: {0 ... K - 1}
long long res = 0LL;
for(int i = 1; i <= N; ++i)
{
if(i >= A) count[ sum[i - A] ] ++;
res += count[sum[i]];
if(i >= B) count[ sum[i - B] ] --;
}
printf("%lld",res);
return 0;
}