Pagini recente » Cod sursa (job #3189656) | Cod sursa (job #207178) | Cod sursa (job #1649387) | Cod sursa (job #1426625) | Cod sursa (job #1307113)
using namespace std;
#include <cstdio>
#include <cstring>
#include <iostream>
int N, K, A, B, v[1<<19], S[1<<19], re[1<<17];
long long rec( int len )
{
memset( re, 0, sizeof( re ) );
long long ret = 0;
if( !len )
return ret;
re[0]++;
// cout << " first half : " << endl;
for( int i = 1; i < len; i++ )
{
ret += (long long)(re[ S[i] ]),
re[ S[i] ]++;
// cout << i << " : incr by " << re[ S[i] ]-1 << endl;
// if( S[i] == 0 )
// ret++;
}
// cout << " second half " << endl;
for( int i = len; i <= N; i++ )
{
ret += (long long)(re[ S[i] ]),
re[ S[i] ]++,
re[ S[i - len] ]--;
// cout << i << " : incr by " << re[ S[i] ]-1 << endl;
// if( S[i] == 0 )
// ret++;
}
// cout << len << " : " << ret << endl;
return ret;
}
int main()
{
freopen("divk.in", "r", stdin);
freopen("divk.out", "w", stdout);
int i;
scanf("%d %d %d %d", &N, &K, &A, &B);
for(i = 1; i <= N; i++)
scanf("%d", v+i ),
S[i] = S[i-1] + v[i],
S[i] %= K;
long long ret = rec( B ) - rec( A - 1 );
cout << ret << endl;
return 0;
}