Cod sursa(job #3203308)

Utilizator Cazacu2006RazvanRazvan Cazacu Cazacu2006Razvan Data 13 februarie 2024 14:57:37
Problema Divk Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>
#include <vector>
#include <bits/stdc++.h>
using namespace std;
ifstream fin("divk.in");
ofstream fout("divk.out");
int n,k,a,b,s[500001],st1[100001],st2[100001],dr[100001],nr;
vector <int> stv[100001];
int main()
{

    fin>>n>>k>>a>>b;
    for(int i=1;i<=n;i++)
    {
        fin>>s[i];
        s[i]=(s[i]+s[i-1])%k;
    }
    stv[0].push_back(0);
    for(int i=1;i<k;i++)
    {
        stv[i].push_back(0);
        st1[i]=1;
        st2[i]=1;

    }
    stv[0].push_back(0);
    st1[0]=1;
    st2[0]=1;
    dr[0]=1;
    for(int i=1;i<=n;i++)
    {
        int x=s[i];

     if(dr[x]!=0)
     {
          while(st2[x]<=dr[x] && (i-stv[x][st2[x]]+1)>a)
        {
            st2[x]++;
        }

        while(st1[x]<=dr[x] && (i-stv[x][st1[x]]+1)<b)
        {
            st1[x]++;
        }
     }




      if(dr[x]!=-1)
       nr+=abs(st1[x]-st2[x]);
        stv[x].push_back(i);
        dr[x]++;

    }
    fout<<nr;
    return 0;
}