Pagini recente » Borderou de evaluare (job #1132181) | Borderou de evaluare (job #2794303) | Borderou de evaluare (job #2053462) | Borderou de evaluare (job #2557457) | Cod sursa (job #968740)
Cod sursa(job #968740)
#include <fstream>
#include <list>
using namespace std;
list<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;
list<int>::iterator it1,it2;
int i1,i2;
for(i=0;i<k;i++)
{
//cout<<"suntem in "<<i<<endl;
it1=v[i].begin();
it2=it1;
i1=0;
i2=1;
it2++;
//cout<<"incepem cu "<<*it1<<' '<<*it2<<endl;
while(it1!=v[i].end() && it2!=v[i].end())
{
//cout<<"deci, "<<*it1<<' '<<*it2<<endl;
dif=((*it2)-(*it1));
if(dif>=a && dif<=b)
{
sol+=(i2-i1);
it1++;
i1++;
}
else if(dif>b)
it1++,i1++;
else if(dif<a)
it2++,i2++;
}
}
fout<<sol<<'\n';
fin.close();
fout.close();
return 0;
}