Cod sursa(job #2415125)

Utilizator ApostolIlieDanielApostol Daniel ApostolIlieDaniel Data 25 aprilie 2019 15:56:13
Problema Divk Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <bits/stdc++.h>

using namespace std;

using ll = int64_t;

const int MAXN = 5e5, MAXK = 1e5;

int car[1 + MAXK];
ll s[1 + MAXN];
int v[1 + MAXN];
int n, k;
ll solve (int l) {
  int i;
  ll sol = 0;
  if (l == 0)
    return 0;
  for (i = 0; i < k; i++)
    car[i] = 0;
  car[0]++;
  s[0] = 0;
  for (i = 1; i <= n; i++) {
    s[i] = s[i - 1] + v[i];
    if (i >= l)
      car[s[i - l] % k]--;
    sol = sol + car[s[i] % k];
    car[s[i] % k]++;
  }
  return sol;
}

int main() {
  int a, b, i;
  freopen ("divk.in", "r", stdin);
  freopen ("divk.out", "w", stdout);

  scanf ("%d%d%d%d", &n, &k, &a, &b);
  for (i = 1; i <= n; i++)
    scanf ("%d", &v[i]);
  printf ("%lld\n", solve (b) - solve (a - 1));
  return 0;
}