Cod sursa(job #1053890)

Utilizator cdascaluDascalu Cristian cdascalu Data 13 decembrie 2013 00:03:10
Problema Divk Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <iostream>
#include <fstream>
#define Nmax 500003
using namespace std;
int N,K,A,B;
long long cnt[Nmax],vec[Nmax];
void read_data()
{
    ifstream f("divk.in");
    f>>N>>K>>A>>B;
    for(int i=1;i<=N;++i)
        f>>vec[i];
    f.close();
}
long long query(int length)
{
    for(int i=0;i<K;++i)
        cnt[i] = 0;
    cnt[0] = 1;
    long long sol = 0;
    for(int i=1;i<=N;++i)
    {
        if(cnt[vec[i]] > 0)
            sol += cnt[vec[i]];
        ++cnt[vec[i]];
        if(i-length >= 0)
            --cnt[vec[i-length]];
    }
    return sol;
}
int main()
{
    read_data();
    ofstream g("divk.out");
    for(int i=1;i<=N;++i)
        vec[i] = (vec[i] + vec[i-1])%K;

    g<<query(B) - query(A-1);
    g.close();
    return 0;
}