Pagini recente » Cod sursa (job #2564834) | Cod sursa (job #2708337) | Cod sursa (job #1465710) | Cod sursa (job #2227922) | Cod sursa (job #494339)
Cod sursa(job #494339)
#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 m,v[1<<19];
int cautbin1(int t)
{
int i, pas=1<<18;
for(i=0; pas; pas>>=1)
if(i+pas<=m && v[i+pas]<t)
i+=pas;
return 1+i;
}
int cautbin2(int t)
{
int i, pas=1<<18;
for(i=0; pas; pas>>=1)
if(i+pas<=m && v[i+pas]<=t)
i+=pas;
return i;
}
int p,n,s=0,k,a,b,i,j;
int main()
{
int p1,p2;
long long rez=0;
f>>n>>k>>a>>b;
x[0].push_back(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)
v[j+1] = x[i][j];
m = x[i].size();
for(j=0; j<x[i].size();++j)
{
p1 = cautbin1(x[i][j] - b);
p2 = cautbin2(x[i][j] - a);
rez += p2 - p1 + 1;
}
}
g<<rez;
return 0;
}