Pagini recente » Cod sursa (job #1002030) | Cod sursa (job #156227) | Cod sursa (job #1889254) | Cod sursa (job #1262033) | Cod sursa (job #1618708)
// Element majoritat - O(N)
/*
Idei
1) Vector de frecventa, cauta in frec daca exista
i a.i frec[i] > n/2
2) Daca vectorul ar fi sortat, atunci elementul
majoritar (daca ar aparea de cel putin n/2 ori)
ar fi egal cu elementul din mijloc. Verific daca
elementul din mijloc din vectorul sortat este el. maj.
*/
#include <fstream>
#include <algorithm>
#define Nmax 1000009
using namespace std;
ifstream f("elmaj.in");
ofstream g("elmaj.out");
int N,candidat,voturi,v[Nmax];
int main()
{
f>>N;
for(int i=1;i<=N;++i)f>>v[i];
candidat=v[1];
voturi=1;
for (int i=2; i<=N; i++)
{
if (v[i]==candidat)
{
++voturi;
}
else
{
--voturi;
if (voturi ==0)
{
candidat=v[i];
voturi=1;
}
}
}
// candidat poate fi element majoritar
voturi=0;
for(int i=1;i<=N;++i)
if(v[i]==candidat)++voturi;
if(voturi>=N/2+1)g<<candidat<<' '<<voturi<<'\n';
else g<<-1<<'\n';
f.close(); g.close();
return 0;
}