Cod sursa(job #968784)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 2 iulie 2013 18:53:09
Problema Divk Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <fstream>
#include <deque>

using namespace std;

deque<int> v[100005];
int main()
{
    ifstream fin("divk.in");
    ofstream fout("divk.out");

    int a,b,n,k,i,x,s=0;
    fin>>n>>k>>a>>b;
    v[0].push_back(0);
    for(i=1;i<=n;i++)
    {
        fin>>x;
        x%=k;
        s=(s+x)%k;
        //cout<<"avem rest "<<s[i]<<endl;
        v[s].push_back(i);
    }
    int sol=0,dif;
    deque<int>::iterator it1,it2;
    int i1,i2;
    int lim;
    for(i=0;i<k;i++)
    {
       // fout<<"suntem in "<<i<<endl;
        it1=v[i].begin();
        it2=it1;
        i1=0;
        i2=1;
        it2++;
        if(it1==v[i].end() || it2==v[i].end())
            continue;
        lim=v[i].size();
        for(;i2<lim;it1++,i1++)
        {
            while(i2<lim)
            {
                if((*(it2+1)-*it1)<=b)
                    it2++,i2++;
                else if(i2==(lim-1))
                    it2++,i2++;
                else
                    break;
            }

            if((*it2-*it1)>=a)
                sol+=(i2-i1);
           // fout<<"i1="<<i1<<' '<<"i2="<<i2<<endl;
        }
    }
    fout<<sol<<'\n';
    fin.close();
    fout.close();
    return 0;
}