Pagini recente » Cod sursa (job #1409410) | Cod sursa (job #1242847) | Cod sursa (job #1201444) | Cod sursa (job #152409) | Cod sursa (job #494331)
Cod sursa(job #494331)
#include<fstream>
#include<vector>
using namespace std;
ifstream f("divk.in");
ofstream g("divk.out");
const int K=1<<17;
vector<int> x[K];
int cautbin1(int t, int lin)
{
int i, pas=1<<17;
if(x[lin][0]>=t)
return 0;
for(i=0; pas; pas>>=1)
if(i+pas<=x[lin].size() && x[lin][i+pas]<t)
i+=pas;
return 1+i;
}
int cautbin2(int t, int lin)
{
int i, pas=1<<17;
for(i=0; pas; pas>>=1)
if(i+pas<=x[lin].size() && x[lin][i+pas]<=t)
i+=pas;
return i;
}
int p,n,s=0,k,a,b,i,j;
int main()
{
int p1,p2,rez=0;
f>>n>>k>>a>>b;
x[0].push_back(0);
//x[0][0]=0;
for(i=1;i<=n;++i)
{
f>>p;
s=(s+p)%k;
x[s].push_back(i);
}
for(i=0; i<k;++i)
for(j=0; j<x[i].size();++j)
{
if(x[i][j]-b < 0)
p1 = 1;
else
p1 = cautbin1(x[i][j] - b,i);
p2 = cautbin2(x[i][j] - a,i);
//g<<"i = "<<i<<" caut "<<x[i][j]<<" si obtin "<<p1<<" "<<p2<<"\n";
rez += p2 - p1 + 1;
}
g<<rez;
return 0;
}