Cod sursa(job #2185083)

Utilizator LucaCernescuCernescu Luca LucaCernescu Data 24 martie 2018 13:01:01
Problema Elementul majoritar Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.73 kb
#include <fstream>
#include <vector>//pt vectori dinamici.
#include <algorithm>//pt sort.
using namespace std;
ifstream in ("elmaj.in");
ofstream out ("elmaj.out");
int main()
{
    int n,aux;//nr de numere;
    in>>n;
    vector<int> v;//vector dinamic; poti sa pui ce nume vrei.
    for(int i=0;i<n;i++)
    {
        in>>aux;
        v.push_back(aux);//adaug pe aux in coada vectorului. (il adaug in multime);
        //cand dai push_back, creste cu 1 lungimea vectorului.
    }
    //la final v va contine toate numerele ce intra in alcatuirea fisierului (alea pt lista);
    //v nu e sortat.
    sort(v.begin(),v.end());//sortam de la ineput pana la sfarsit.
    //trebuie gasit elementu majoritar.
    int Max=0;//numaru maxim de aparitii.
    int MaxV=0;//elementu care apare de cele mai multe ori. de Max ori.
    aux=1;
    int auxv=v[0];
    for(int i=1;i<v.size()/*lungimea vectorului*/;i++)//pe v[0] nu il mai verifici.s
    {
        if(auxv==v[i])
        {
            aux++;//daca nr curent e egal cu nr verificat, inseamna ca mai apare o data, adica acum;
        }
        else //daca nu, verificam din nou pt noul element:
        {
            if(aux>Max)//daca numarul curent apare de mai multe ori decat maximul, e noul maxim;
            {
                Max=aux;
                MaxV=auxv;//noul numar ce apare de max ori e auxv;
            }
            auxv=v[i];//dupa ce am rezolvat maximu, facem din nou toata povestea pt noul numar diferit de precedentu;
            aux=1;//momentan a aparut o singura data;
            //astea doua le faci mereu (ultimele doua linii)
        }
    }
    //verifici sa fie elmaj;
    if(MaxV>=n/2+1)
    {
        out<<MaxV<<' '<<Max;
    }
    return 0;
}