Cod sursa(job #1700367)

Utilizator BrandonChris Luntraru Brandon Data 10 mai 2016 13:01:03
Problema Divk Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <fstream>

#define LL long long
using namespace std;

ifstream cin("divk.in");
ofstream cout("divk.out");

const int MaxN = 500005, MaxK = 100005;

LL ModFreq[MaxK];
int v[MaxN];
LL Ans;
int n, k, A, B, CurrSum, RgSum, LfSum;

int main() {
  cin >> n >> k >> A >> B;

  for (int i = 1; i <= n; ++i) {
    cin >> v[i];

    if (i <= A) {
      CurrSum += v[i];
      CurrSum %= k;
    }
  }

  ModFreq[0] = 1;

  for (int i = A + 1; i <= n; ++i) {
    CurrSum += v[i];
    CurrSum %= k;
    RgSum += v[i - A];
    RgSum %= k;

    if (i == B + 1) --ModFreq[0];

    if (i >= B + 1) {
      LfSum += v[i - B];
      LfSum %= k;
      --ModFreq[LfSum];
    }

    ++ModFreq[RgSum];
    Ans += ModFreq[CurrSum];
  }

  cout << Ans << '\n';
  return 0;
}