Cod sursa(job #1132448)

Utilizator andrei.sfrentSfrent Andrei andrei.sfrent Data 3 martie 2014 12:43:57
Problema Divk Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <cstdio>
#include <vector>

using namespace std;

void printv(const vector<int>& v) {
  for(int x : v) {
    printf("%d ", x);
  }
  printf("\n");
}

int main(int argc, char *argv[]) {
  freopen("divk.in", "r", stdin);
  freopen("divk.out", "w", stdout);

  int N, K, A, B;
  scanf("%d%d%d%d", &N, &K, &A, &B);
  vector<int> s = {0};
  vector<int> r(K, 0);
  for(int i = 0; i < N; ++i) {
    int x;
    scanf("%d", &x);
    s.push_back((s.back() + x) % K);
  }

  // printf("s = "); printv(s);

  long long total = 0;
  for(int i = 0; i < N + 1; ++i) {
    int out = i - B - 1, in = i - A;
    if(out >= 0) r[s[out]]--;
    if(in >= 0) r[s[in]]++;
    total += r[s[i]];
  }

  printf("%lld\n", total);

  return 0;
}