Pagini recente » Cod sursa (job #961306) | Cod sursa (job #403953) | Cod sursa (job #2687614) | Cod sursa (job #164595) | Cod sursa (job #2009271)
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
using namespace std;
ifstream fin("divk.in");
ofstream fout("divk.out");
int n, k, a, b, c, sum, v[500004], f[500005], r[500005], s[500005], j, i, nr, x, y, cat;
int main () {
//fin >> n >> k >> a >> b;
//while (nr == sum)
//{
nr = sum = 0;
/*for (i = 1; i <= 20 ; i++)
s[i] = 0;
srand((int)time(0));
k = a = b = 100;
while (n % 10 <= 6) n = rand() % 10;
while (k % 10 < 2) k = rand() % 10;
while (a % 10 < 2 || a % 10 > 6) a = rand() % 10;
while (b % 10 <= a || b == 100 || b > n) b = rand() % 10;
for (i = 1; i <= n; i++)
v[i] = rand() % 10 + 1;*/
fin >> n >> k >> a >> b;
x = a; y = b;
for (i = 1; i <= n; i++)
{
fin >> v[i];
s[i] += s[i-1]+v[i];
v[i] += v[i-1];
v[i-1] %= k;
}
v[n] %= k;
c = b-a+1;
for (i = 1; i <= n; i++)
{
f[v[i]]++;
if (i > c) f[v[i-c]]--;
if (i+a <= n) r[i+a] = f[v[i+a]];
if (v[i] == 0 && i <= b && i >= a)
r[i]++;
sum += r[i];
}
//cout << sum << " " << nr << "\n";
cat++;
//}
/*cout << "Dupa " << cat << " incercari: \n";
cout << "n = " << n << " " << "k = " << k << "a = " << a << " " << "b = " << b << " \n";
for (i = 1; i <= n; i++)
cout << s[i] << " "; cout << "\n";
for (i = 1; i <= n; i++)
cout << v[i] << " "; cout << "\n\n";
cout << "Al meu: "<< sum << "\n";
cout << "Corect: "<< nr << "\n";*/
fout << sum << "\n";
}