Cod sursa(job #1571607)

Utilizator CarabasRobertCarabas Robert-Iancu CarabasRobert Data 18 ianuarie 2016 11:01:16
Problema Divk Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <bits/stdc++.h>

using namespace std;

int n, k, A, B;
int a[500005], v[100001];

vector <int> h[100001];

void Citire()
{
    int i;
    ifstream fin("divk.in");
    fin >> n >> k >> A >> B;
    for(i = 1; i <= n; i++)
        fin >> a[i];
    fin.close();
}

long long secv(int L)
{
    long long cnt;
    int r, i, j, len;
    cnt = 0;
    for(r = 0; r < k; r++)
    {
        len = h[r].size();
        for(i = 0; i < len; i++)
            v[i] = h[r][i];
        i = 0;
        for(j = 0; j < len; j++)
        {
            while(v[j] - v[i] > L)  i++;
            cnt += (j - i + 1);
        }
    }
    return cnt;
}

void Rezolva()
{
    int i, s;
    long long Sol;
    h[0].push_back(0);
    s = 0;
    for(i = 1; i <= n; i++)
    {
        s = (s + a[i]) % k;
        h[s].push_back(i);
    }
    Sol = secv(B) - secv(A - 1);
    ofstream fout("divk.out");
    fout << Sol << "\n";
    fout.close();
}

int main()
{
    Citire();
    Rezolva();
    return 0;
}