Pagini recente » Cod sursa (job #1775243) | Cod sursa (job #508294) | Cod sursa (job #1641667) | Cod sursa (job #1345455) | Cod sursa (job #1536502)
#include<iostream>
#include<fstream>
#include<stdio.h>
using namespace std;
#define N 500001
#define K 100001
//ifstream in("divk.in");ofstream out("divk.out");
FILE *in = fopen("divk.in","r");
FILE *out = fopen("divk.out","w");
long long fcv_a[K], fcv_b[K];
int v[N], s[N];
int n,k,a,b;
long long sol_a, sol_b;
/*void afis()
{
int i;
for(i=0; i<k; ++i) cout<<fcv_a[i]<<" ";
cout<<" "<<sol_a;
cout<<"\n";
for(i=0; i<k; ++i) cout<<fcv_b[i]<<" ";
cout<<" "<<sol_b;
cout<<"\n";
cout<<"\n";
}*/
int main()
{
int i,s1,s2,x;
///in>>n>>k>>a>>b; for(i=1; i<=n; ++i) in>>v[i];
fscanf(in, "%d %d %d %d", &n, &k, &a, &b);
for(i=1; i<=n; ++i) fscanf(in, "%d", &v[i]);
for(i=1; i<=n; ++i) s[i] = (s[i-1] + v[i]) % k;
///for(i=0; i<=n; ++i) cout<<s[i]<<" "; cout<<"\n\n";
--a; /// !!! Se iau solutiile de lungime b, din care se scad solutiile de lungime (a-1)
fcv_a[0] = 1;
fcv_b[0] = 1;
for(i=1; i<=n; ++i)
{
x = s[i]; /// ceea ce caut
if(i > a)
{
s1 = s[i-a-1]; /// prev
--fcv_a[s1];
}
if(i > b)
{
s2 = s[i-b-1]; /// prev
--fcv_b[s2];
}
++fcv_a[x];
sol_a += fcv_a[x] - 1;
++fcv_b[x];
sol_b += fcv_b[x] - 1;
//afis();
}
/*cout<<"Sol 1: "<<sol_a<<"\n";
cout<<"Sol 2: "<<sol_b<<"\n";
cout<<"\n";
cout<<sol_b - sol_a;
cout<<"\n";*/
fprintf(out,"%lld", (sol_b - sol_a));
return 0;
}