Pagini recente » Cod sursa (job #2801840) | Articole de informatica, algoritmi, structuri de date | Cod sursa (job #471374) | Cod sursa (job #1990367) | Cod sursa (job #246598)
Cod sursa(job #246598)
#include <cstdio>
#include <vector>
using namespace std;
#define MAX_N 500005
#define MAX_K 100005
int A, B, K, N;
int V[MAX_N];
vector <int> H[MAX_N];
void citire()
{
scanf("%d %d %d %d",&N, &K, &A, &B);
for(int i = 1; i <= N; ++i)
scanf("%d",V+i);
}
int find(int L)
{
int Rez = 0;
for(int i = 0; i < K; ++i)
{
if(H[i].empty() || H[i].size() < 2) continue;
int i1 = 0, i2 = 1;
for(;i2 < H[i].size(); ++i2)
{
while(H[i][i2] - H[i][i1] > L)
++i1;
Rez += (i2 - i1);
}
}
return Rez;
}
void solve()
{
int s = 0;
H[0].push_back(0);
for(int i = 1; i <= N; ++i)
{
s = (s + V[i]) % K;
H[s].push_back(i);
}
int Rez = find(B) - find(A - 1);
printf("%d\n",Rez);
}
int main()
{
freopen("divk.in","rt",stdin);
freopen("divk.out","wt",stdout);
citire();
solve();
}