Cod sursa(job #2889926)

Utilizator Stefanstef99Stefan Puica Stefanstef99 Data 13 aprilie 2022 20:14:08
Problema Divk Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,k,a,b;
int v[500005];
vector <int> c,p[100005];

long long f(int x)
{
    long long sum=0;
    int i,j,j1,j2,s;
    for(i=0;i<k;i++)
    {
        j2=0;
        s=0;
        if(p[i].size()<=1) continue;
        c.clear();
        c.push_back(0);
        for(j=0;j<p[i].size()-1;j++) c.push_back(p[i][j+1]-p[i][j]);
        for(j1=1;j1<c.size();j1++)
        {
            while(j2<c.size()-1 && s+c[j2+1]<=x)
            {
                j2++;
                s+=c[j2];
            }
            if(j2>=j1) sum+=j2-j1+1;
            s-=c[j1];
        }
    }
    return sum;
}

int main()
{
    long long s=0;
    fin>>n>>k>>a>>b;
    for(int i=1;i<=n;i++) fin>>v[i];
    p[0].push_back(0);
    for(int i=1;i<=n;i++)
    {
        s+=v[i];
        p[s%k].push_back(i);
    }
    fout<<f(b)-f(a-1)<<"\n";
    return 0;
}