Cod sursa(job #2547377)

Utilizator Vally77FMI Calinescu Valentin Gelu Vally77 Data 15 februarie 2020 12:08:05
Problema Divk Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <cstdio>
#include <vector>
using namespace std;
vector <int> resturi[100002];
int main() {
    
    freopen("divk.in", "r", stdin);
    freopen("divk.out", "w", stdout);
    
    int n, k, a, b, x, sp = 0;
    scanf("%d%d%d%d", &n, &k, &a, &b);
    
    for (int i = 0; i < n; i++) {
        scanf("%d", &x);
        sp = (sp + (x%k))%k;
        resturi[sp].push_back(i);
    }
    
    
int stanga, dreapta;
    int solutie = 0;
    for (int i = 0; i < k; i++) {
        if (resturi[i].size() >= 2) {
            stanga = 0;
            dreapta = 1;
            while (dreapta < resturi[i].size() && resturi[i][stanga] <= resturi[i][dreapta]) {
                if (resturi[i][dreapta] - resturi[i][stanga] >= a && resturi[i][dreapta] - resturi[i][stanga] <= b)
                    solutie ++, dreapta ++;
                else 
                    if (resturi[i][dreapta] - resturi[i][stanga] < a) {
                        dreapta ++;
                    }
                    else 
                        if (resturi[i][dreapta] - resturi[i][stanga] > b) {
                            stanga ++;
                        }
            }
        }
    }
    
    printf("%d\n", solutie + resturi[0].size());
    
    return 0;
    
    
}