Cod sursa(job #2685995)

Utilizator andreea.traistaru00Andreea Traistaru andreea.traistaru00 Data 18 decembrie 2020 11:48:16
Problema Lowest Common Ancestor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.64 kb
#include <iostream>
using namespace std;
# define MAX_L 100000
# define MAX_H 10

int cmmdc (int v[], int n){
    int cmmdc = v[1];
    for (int i = 2; i <= n; i++){
        int aux = v[i];
        if (v[i] == 1){
            cmmdc = 1;
            break;
        }
        while (aux != cmmdc){
            if (aux > cmmdc){
                aux -=cmmdc;
            } else {
                cmmdc -=aux;
            }
        }
    }
   return cmmdc;
}
int sum (int v[], int n){
    int s = 0;
    for (int i = 1; i <= n; i++){
        s += v[i];
    }
    return s;
}
int nrBlocuri (int v[], int n){
    int noZeros = 0;
    int array[MAX_L];
    int index = 0;
    for (int i = 1 ; i <= n; i++){
        if (v[i] == 0){
            noZeros++;
        } else {
            if (noZeros != 0) {
                index++;
                array[index] = noZeros;
            }
            noZeros = 0;
        }
    }
    if (noZeros != 0){
        index++;
        array[index] = noZeros;
    }

    int bloc = cmmdc (array, index);
    int res = sum(array, index) / bloc;
    return res;
}

int main() {
    int L , H;
    cin >> L >> H;
    int matrix[MAX_L][MAX_H];
    int v;
    for (int i = 1; i <= L; i++){
        cin >> v;
        int rand = 1;
        for (int linie = H; linie > (H - v); linie--){
            matrix[linie][i] = rand;
            rand++;
        }
        for (int linie = 1; linie <= H-v; linie++){
            matrix[linie][i] = 0;
        }
    }
    int s = 0;
    for (int i = 1; i <= H; i++){
        s += nrBlocuri(matrix[i], L);
    }
    cout << s;
    return 0;
}