Cod sursa(job #1002750)

Utilizator romircea2010FMI Trifan Mircea Mihai romircea2010 Data 28 septembrie 2013 18:44:42
Problema Shop Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <iostream>
#include <fstream>
#define KMax 100010
#define NMax 500010

using namespace std;

int n, k, a, b;
long freq[KMax], v[NMax];

inline void Read()
{
    ifstream f("divk.in");
    int i;
    f>>n>>k>>a>>b;
    for (i=1; i<=n; ++i)
    {
        f>>v[i];
        v[i] = (v[i-1] + v[i])%k;
    }
    f.close();
}

inline void Init()
{
    int i;
    for (i=0; i<=k; ++i)
        freq[i] = 0;
}

inline long long Query(int sz)
{
    Init();
    int i;
    long long ret = 0LL;
    for (i=1; i<=sz; ++i)
    {
        if (v[i] == 0)
            ++ret;
        ret += freq[v[i]];
        ++freq[v[i]];
    }
    for (; i<=n; ++i)
    {
        ret += freq[v[i]];
        ++freq[v[i]];
         --freq[v[i-sz]];

    }
    return ret;
}

inline void Write()
{
    ofstream g("divk.out");
    g<<0LL + Query(b) - Query(a-1)<<"\n";
    g.close();
}

int main()
{
    Read();
    Write();
    return 0;
}