Cod sursa(job #1641369)

Utilizator cristian.diaconuDiaconu Cristian cristian.diaconu Data 8 martie 2016 22:41:35
Problema Elementul majoritar Scor 40
Compilator c Status done
Runda Arhiva educationala Marime 1.33 kb

#include<stdio.h>

int binary_count(int *v, char *visited, int n, int left, int right) {

    if(right < left) {
        return 0;
    }
    if(right == left) {
        if(v[right] == n) {
            visited[right] = 1;
            return 1;
        }
        return 0;
    }

    int middle = (right - left) / 3;
    return binary_count(v, visited, n, left, left + middle) +
           binary_count(v, visited, n, left + middle + 1, left + 2 * middle) +
           binary_count(v, visited, n, left + 2*middle + 1, right);

}

int main() {

    int size, i;
    FILE *fi = fopen("elmaj.in", "r");
    fscanf(fi, "%d", &size);
    int vect[size];
    for(i = 0; i < size; i++) {
        fscanf(fi, "%d", &vect[i]);
    }
    fclose(fi);
    int majoritar = 0, counter = 0, aux_c;
    char visited[size];
    for(i = 0; i < size; i++) {
        visited[i] = 0;
    }
    for(i = 0; i < size; i++) {
        if(visited[i] == 1) {
            continue;
        }
        aux_c = binary_count(vect, visited, vect[i], 0, size - 1);
        if(aux_c > counter) {
            counter = aux_c;
            majoritar = vect[i];
        }
    }

    if(counter >= (size/2 + 1)) {
        FILE *fo = fopen("elmaj.out", "w");
        fprintf(fo, "%d %d", majoritar, counter);
        fclose(fo);
    }

    return 0;
}