Cod sursa(job #3151926)

Utilizator Traian_7109Traian Mihai Danciu Traian_7109 Data 23 septembrie 2023 09:35:43
Problema Divk Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <bits/stdc++.h>
#define ll long long 
#define ull unsigned long long 
#define ld long double
#define pii pair<int, int>
#define pll pair<ll, ll
#define pb push_back
#define eb emplace_back

using namespace std;

signed main() {
  #ifndef TEST
    freopen("divk.in", "r", stdin);
    freopen("divk.out", "w", stdout);
  #endif
  ios_base :: sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  int n, k, a, b;
  cin >> n >> k >> a >> b;
  vector<int> v(n + 1);
  for (int i = 1; i <= n; i++)
    cin >> v[i];
  vector<int> sums(n + 1);
  for (int i = 1; i <= n; i++)
    sums[i] = (sums[i - 1] + v[i]) % k;
  vector<int> cnt(k);
  int ans = 0;
  for (int i = 1; i <= n; i++) {
    /// vreau sa pastrez doar cele la lungime a si sa sterg pe alea la lungime b + 1
    if (i >= a)
      cnt[sums[i - a + 1]]++;
    ans += cnt[sums[i]];
    if (i > b)
      cnt[sums[i - b]]--;
  }
  cout << ans;
  return 0;
}