Cod sursa(job #2526751)

Utilizator eugen5092eugen barbulescu eugen5092 Data 19 ianuarie 2020 10:16:34
Problema Divk Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <bits/stdc++.h>
using namespace std;
ifstream ci("divk.in");
ofstream cou("divk.out");
int n,k,a,b,v[500005];
long long sol;
vector<int>h[100001];

void citire()
{
    ci>>n>>k>>a>>b;
    for(int i=1; i<=n; i++)
    {
        ci>>v[i];
    }

}

int calc(int nr)
{
    int i,j,secv=0,l,st,dr;
    for(i=0; i<k; i++ )
    {
        l=h[i].size();
        for(j=0; j<l; j++ )
        {
            v[j]=h[i][j];
        }
        st=0;
        for(dr=0; dr<l; dr++)
        {
            while(v[dr]-v[st]>nr )
            {
                st++;
            }


                secv+=dr-st+1;

        }

    }
    return secv;

}


void rez()
{
    int s,i;
    h[0].push_back(0);
    s=0;
    for(i=1; i<=n; i++)
    {
        s+=v[i];
        s=s%k;
        h[s].push_back(i);
    }

    sol=calc(b)-calc(a-1);
    cou<<sol;
}


int main()
{
    citire();
    rez();
    return 0;
}