Pagini recente » Cod sursa (job #193881) | Cod sursa (job #1880797) | Cod sursa (job #398223) | Cod sursa (job #1525627) | Cod sursa (job #792595)
Cod sursa(job #792595)
#include <cstdio>
#include <vector>
#define maxN 500005
using namespace std;
FILE *f = fopen ("divk.in","r");
FILE *g = fopen ("divk.out","w");
int n, K, a, b, v[maxN];
long long sum[maxN], SOL;
vector<int> L[maxN];
void read()
{
fscanf (f, "%d%d%d%d", &n, &K, &a, &b);
for (int i = 1; i <= n; i++) {
fscanf (f, "%d", &v[i]);
sum[i] = sum[i - 1] + 1LL * v[i];
}
for (int i = 1; i <= n; i++)
L[sum[i] % K].push_back(i);
}
void solve()
{
int ind;
for (int i = 0; i < L[0].size(); i++) {
if (i == 0)
ind = 0;
else
ind = L[0][i - 1];
for (int j = i; j < L[0].size() && (L[0][j] - ind <= b); j++)
if (L[0][j] - ind >= a)
SOL++;
}
for (int i = 1; i <= K - 1; i++)
if (L[i].size() > 1) {
for (int j = 0; j < L[i].size(); j++)
for (int k = j + 1; k < L[i].size() && (L[i][k] - L[i][j] <= b); k++)
if (L[i][k] - L[i][j] >= a)
SOL++;
}
}
int main()
{
read();
solve();
fprintf (g, "%lld\n", SOL);
fclose(f);
fclose(g);
return 0;
}