Pagini recente » Cod sursa (job #2017782) | Cod sursa (job #1817568) | Cod sursa (job #2194444) | Cod sursa (job #2172790) | Cod sursa (job #373008)
Cod sursa(job #373008)
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
#define MAX_N 500002
#define DIM 8192
char vec[DIM];
int pz;
int S[MAX_N];
int N,K,a,b;
vector<int>A[MAX_N];
void cit(int &x)
{
x=0;
while(vec[pz]<'0' || vec[pz]>'9')
if(++pz==DIM) fread(vec,1,DIM,stdin),pz=0;
while(vec[pz]>='0' && vec[pz]<='9')
{
x=x*10+vec[pz]-'0';
if(++pz==DIM)fread(vec, 1, DIM, stdin),pz=0;
}
}
long long unsigned q(int x, int i, int j)
{
int p = (int)(lower_bound(A[x].begin(), A[x].end(), i) - A[x].begin());
int k = (int)(upper_bound(A[x].begin(), A[x].end(), j) - A[x].begin()) - 1;
if(p > k) return 0;
return (long long unsigned)(k - p +1);
}
int main()
{
freopen("divk.in","r",stdin);
freopen("divk.out","w",stdout);
cit(N), cit(K); cit(a), cit(b);
int i,x,p;
long long unsigned sol = 0;
for(i = 1; i <= N; ++i)
{
cit(x);
S[i] = (S[i-1] + x)%K;
A[S[i]].push_back(i);
}
for(i = 1; i + a - 1 <= N; ++i)
{
p = min(N, i + b -1);
sol += q(S[i-1], i + a - 1, p);
}
printf("%llu\n",sol);
return 0;
}