Pagini recente » Cod sursa (job #10046) | Cod sursa (job #1170226) | Cod sursa (job #1285290) | Cod sursa (job #2969683) | Cod sursa (job #1144003)
#include <fstream>
#include <vector>
using namespace std;
ifstream is("divk.in");
ofstream os("divk.out");
int n, k, lmin, lmax;
int a, s;
int ii[100000], jj[100000];
long long answ;
vector<int> r[100000];
int main()
{
is >> n >> k >> lmin >> lmax;
for ( int i = 0; i < k; ++i )
r[i].push_back(0);
r[0][0] = 1;
r[0].push_back(0);
for ( int i = 1; i <= n; ++i )
{
is >> a;
s = ( s + a ) % k;
++r[s][0];
r[s].push_back(i);
if ( i == 1 )
jj[s] = 1;
if ( i == lmax )
jj[s] = lmax;
/*for ( int j = 1; j <= r[s][0]; ++j )
if ( i - r[s][j] >= lmin && i - r[s][j] <= lmax )
++answ;*/
if ( i - r[s][ii[s]] + 1 < lmin )
++ii[s];
if ( i - r[s][jj[s]] + 1 <= lmax )
--jj[s];
answ += jj[s] - ii[s] + 1;
}
os << answ;
is.close();
os.close();
return 0;
}