Cod sursa(job #2446030)

Utilizator alexoloieriAlexandru Oloieri alexoloieri Data 6 august 2019 19:58:25
Problema Elementul majoritar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <bits/stdc++.h>
using namespace std;

template<class T>
class majorityElement
{
private:
#define uint unsigned int
    std::vector<T>elements;
public:
    void addElement(T &el)
    {
        elements.push_back(el);
    }
    bool findMajorityElement(T &ans, uint &nrAp)
    {
        int ap = 1;
        T maj = elements[0];
        for (uint i=1;i<elements.size();++i)
        {
            if (elements[i] == maj)
                ++ap;
            else
                --ap;
            if (ap == -1)
                ap = 1, maj = elements[i];
        }
        ap = 0;
        for (uint i=0;i<elements.size();++i)
            if (elements[i] == maj) ++ap;
        bool res = false;
        if (ap * 2 > elements.size()) res = true, ans = maj, nrAp = ap;
        return res;
    }
};

int main()
{
    int n, x;
    freopen("elmaj.in","r",stdin);
    freopen("elmaj.out","w",stdout);
    scanf("%d",&n);
    majorityElement<int>maj;
    for (int i=1;i<=n;++i)
    {
        scanf("%d",&x);
        maj.addElement(x);
    }
    int ans;
    unsigned int ap;
    bool an = maj.findMajorityElement(ans, ap);
    if (an)
        printf("%d %d\n", ans, ap);
    else
        printf("-1\n");
    return 0;
}