Cod sursa(job #1980968)

Utilizator NicolaalexandraNicola Alexandra Mihaela Nicolaalexandra Data 14 mai 2017 14:54:10
Problema Divk Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <fstream>
#include <vector>
using namespace std;
int n,k,a,b,x,v[500001],st,dr,i,j,sol;
vector <int> L[100001];
ifstream fin ("divk.in");
ofstream fout ("divk.out");

int main (){

    fin>>n>>k>>a>>b;
    for (i=1;i<=n;i++){
        fin>>x;
        v[i] = v[i-1] + x;
        v[i] %= k;
        L[v[i]].push_back (i);
    }
    for (i=0;i<k;i++){
        st = 0;
        dr = 0;
        for (j=1;j<L[i].size();j++){
            while (L[i][j] - L[i][st] + 1 > b)
                st++;
            while (L[i][j] - L[i][dr] + 1 >= a)
                dr++;
            dr--;
            if (L[i][j] - L[i][st] + 1 <= b && L[i][j] - L[i][dr] + 1 >= a)
                sol += dr-st+1;
        }
    }
    fout<<sol;




    return 0;
}