Pagini recente » Cod sursa (job #805588) | Cod sursa (job #1745682) | Cod sursa (job #2032758) | Cod sursa (job #773916) | Cod sursa (job #968784)
Cod sursa(job #968784)
#include <fstream>
#include <deque>
using namespace std;
deque<int> v[100005];
int main()
{
ifstream fin("divk.in");
ofstream fout("divk.out");
int a,b,n,k,i,x,s=0;
fin>>n>>k>>a>>b;
v[0].push_back(0);
for(i=1;i<=n;i++)
{
fin>>x;
x%=k;
s=(s+x)%k;
//cout<<"avem rest "<<s[i]<<endl;
v[s].push_back(i);
}
int sol=0,dif;
deque<int>::iterator it1,it2;
int i1,i2;
int lim;
for(i=0;i<k;i++)
{
// fout<<"suntem in "<<i<<endl;
it1=v[i].begin();
it2=it1;
i1=0;
i2=1;
it2++;
if(it1==v[i].end() || it2==v[i].end())
continue;
lim=v[i].size();
for(;i2<lim;it1++,i1++)
{
while(i2<lim)
{
if((*(it2+1)-*it1)<=b)
it2++,i2++;
else if(i2==(lim-1))
it2++,i2++;
else
break;
}
if((*it2-*it1)>=a)
sol+=(i2-i1);
// fout<<"i1="<<i1<<' '<<"i2="<<i2<<endl;
}
}
fout<<sol<<'\n';
fin.close();
fout.close();
return 0;
}