Cod sursa(job #2223068)

Utilizator claudiu.gatinaFMI Claudiu Gatina claudiu.gatina Data 19 iulie 2018 01:11:24
Problema Elementul majoritar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.92 kb
#include <iostream>
#include <cstdio>
#include <map>
#include <vector>
#define BIGPRIMENUMBER 138257

using namespace std;

int n;

struct INT
{
    int number;
    int frequency;
    INT(int _n, int _f)
    {
        number = _n;
        frequency = _f;
    }
};

class Hash
{
    vector<INT> lists[BIGPRIMENUMBER];
    int maxFrequency;
    int maxNumber;
public:
    Hash()
    {
        maxFrequency = 0;
        maxNumber = 0;
    }
    bool search(int x, int &i)
    {
        int indice = x % BIGPRIMENUMBER;
        for(i = 0; i < lists[indice].size(); ++i)
        {
            if(lists[indice][i].number == x)
                return true;
        }
        return false;
    }

    bool search(int x)
    {
        int indice = x % BIGPRIMENUMBER;
        for(int i = 0; i < lists[indice].size(); ++i)
        {
            if(lists[indice][i].number == x)
                return true;
        }
        return false;
    }

    void insert(int x)
    {
        int indiceInList;
        int indice = x % BIGPRIMENUMBER;
        if(!search(x, indiceInList))
        {
            lists[indice].push_back(INT(x, 1));
        }
        else
        {
            ++lists[indice][indiceInList].frequency;
            if(maxFrequency < lists[indice][indiceInList].frequency)
            {
                maxFrequency = lists[indice][indiceInList].frequency;
                maxNumber = x;
            }
        }
    }

    void afisare()
    {
        if(maxFrequency >= n / 2 + 1)
            printf("%d %d", maxNumber, maxFrequency);
        else
            printf("-1");
    }
}contor;

int main()
{
    freopen("elmaj.in", "r", stdin);
    freopen("elmaj.out", "w", stdout);
    int maximum = 0;
    scanf("%d", &n);
    for(int i = 0; i < n; ++i)
    {
      int a;
      scanf("%d", &a);
      contor.insert(a);
    }
    contor.afisare();
    return 0;
}