Cod sursa(job #1700375)

Utilizator BrandonChris Luntraru Brandon Data 10 mai 2016 13:33:23
Problema Divk Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 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], Psum[MaxN];
LL Ans;
int n, k, A, B, CurrSum, RgSum, LfSum;

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

  for (int i = 1; i < A; ++i) {
    int x;
    cin >> x;

    Psum[i] = Psum[i - 1] + x;
    Psum[i] %= k;
  }

  for (int i = A; i < B; ++i) {
    int x;
    cin >> x;

    Psum[i] = Psum[i - 1] + x;
    Psum[i] %= k;

    ++ModFreq[Psum[i - A]];
    Ans += ModFreq[Psum[i]];
  }

  for (int i = B; i <= n; ++i) {
    int x;
    cin >> x;

    Psum[i] = Psum[i - 1] + x;
    Psum[i] %= k;

    ++ModFreq[Psum[i - A]];
    Ans += ModFreq[Psum[i]];
    --ModFreq[Psum[i - B]];
  }

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