Cod sursa(job #851887)

Utilizator ard_procesoareLupicu ard_procesoare Data 10 ianuarie 2013 16:31:45
Problema Divk Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
//#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("divk.in");
ofstream fout("divk.out");
#define NMAX 500005
int n,k,a,b,v[NMAX],d[NMAX];
long long sol;
void read()
{
    fin>>n>>k>>a>>b;
    for(int i=1;i<=n;i++)
    {
        fin>>v[i];
        v[i]%=k;
    }
}
void init()
{
    int p,i,j;
    for(i=a;i<=b;i++)
    {
        p=1;
        d[1]=v[i];
        for(j=i-1;j;j--)
        {
            d[++p] = d[p-1] + v[j];
            if(d[p]>=k) d[p]-=k;
            if(i-j+1 >= a)
                if(d[p] == 0) sol++;
        }
    }
}
void solve()
{
    int i,j,p;
    for(i=b+1;i<=n;i++)
    {
        p=1;
        d[1]=v[i];
        for(j=i-1;j>=i-b+1;j--)
        {
            d[++p] = d[p-1] + v[j];
            if(d[p]>=k) d[p]-=k;
            if(i-j+1 >= a)
                if(d[p] == 0) sol++;
        }
    }
}

void tipar()
{
    int i,j;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++) fout<<d[i]<<" ";
        fout<<endl;
    }
}
int main()
{
    read();
    init();
    solve();
    fout<<sol;
    //tipar();
}