Cod sursa(job #1847540)

Utilizator tudorcomanTudor Coman tudorcoman Data 14 ianuarie 2017 18:29:27
Problema Divk Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.62 kb

#include <cstdio>

int resturi[500001];
int f[100001];

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

  int N, k, A, B, x;
  scanf("%d %d %d %d", &N, &k, &A, &B);

  for(int i = 1; i <= N; ++ i) {
    scanf("%d", &x);
    resturi[i] = (resturi[i - 1] + x) % k;
    if(i >= A and i <= B)
      ++ f[resturi[i - A]];
  }

  long long ans = 0LL;
  for(int i = A; i <= B; ++ i)
    ans += f[resturi[i]];

  for(int i = B + 1; i <= N; ++ i) {
    ans += f[resturi[i]];
    -- f[resturi[i - B - 1]];
    ++ f[resturi[i - A]];
  }

  printf("%lld\n", ans);
  return 0;
}