Cod sursa(job #1847545)

Utilizator tudorcomanTudor Coman tudorcoman Data 14 ianuarie 2017 18:32:29
Problema Divk Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.59 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);

  long long ans = 0LL;
  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]];
      ans += f[resturi[i]];
    }
  }

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

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