Cod sursa(job #3278111)

Utilizator apoputoaievladVlad Cristian Apoputoaie apoputoaievlad Data 18 februarie 2025 17:59:45
Problema Divk Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.68 kb
#include <bits/stdc++.h>
using namespace std;

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

/**
6 5 2 4

a =    2 9 5 4 1 4
sp= 0  2 1 1 0 1 0
*/
/// nr de secv de lungime cel mult X care sunt divizivile cu K

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

long long Numara(int X)
{
    int fr[100001]={0},i;
    long long cnt=0;
    fr[0]=1;
    sp[0]=0;
    for(i=1;i<=n;i++)
    {
        sp[i]=(sp[i-1]+a[i])%k;
        if(i>X)
        fr[sp[i-X-1]]--;
        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<<Numara(B)-Numara(A-1);
    return 0;
}