Cod sursa(job #3255651)

Utilizator Stefanstef99Stefan Puica Stefanstef99 Data 11 noiembrie 2024 18:00:23
Problema Divk Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("divk.in");
ofstream fout("divk.out");

/**
f(x)= nr de secv de lungime <= decat x si care sunt divizibile
      cu k

Sol = f(B) - f(A-1)
*/

int n,k,A,B;
int a[500005];
int sp[500005];

long long f(int x)
{
    int fr[100001]={0},i,j;
    long long cnt=0;
    sp[0]=j=0;
    fr[0]=1;
    for(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()
{
    int i;
    fin>>n>>k>>A>>B;
    for(i=1;i<=n;i++) fin>>a[i];
    fout<<f(B)-f(A-1);
    return 0;
}