Cod sursa(job #3267844)

Utilizator EricDimiericdc EricDimi Data 12 ianuarie 2025 16:54:52
Problema Divk Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("divk.in");
ofstream g("divk.out");

const int MAX_N = 500'000;
const int MAX_K = 100'000;

int sp[MAX_N + 5];
int fr[MAX_K + 5];
int a[MAX_N + 5];
int N, K, A, B;

long long nr_subsecv(int x)
{
	/// returneaza numarul subsecventelor cu suma divizibila cu K si lungimea l <= x
	memset(fr, 0, sizeof(fr));
	long long cnt = 0;
	int j = 0;
	fr[0] = 1;
	for (int i = 1; i <= N; i++)
	{
		sp[i] = (sp[i - 1] + a[i]) % K;
		if (i - j > x)
		{
			fr[sp[j]]--;
			j++;
		}
		cnt += fr[sp[i]];
		fr[sp[i]]++;
	}
	return cnt;
}

int main()
{
	f >> N >> K >> A >> B;

	for (int i = 1; i <= N; i++)
		f >> a[i];

	g << nr_subsecv(B) - nr_subsecv(A - 1) << '\n';

    f.close();
    g.close();
    return 0;
}