Pagini recente » Cod sursa (job #1935155) | Cod sursa (job #2037799) | Cod sursa (job #2528931) | Cod sursa (job #1924652) | Cod sursa (job #1710530)
#include <iostream>
#include <fstream>
#include <cmath>
#define maxx 1000
using namespace std;
ifstream f("elmaj.in");
ofstream g("elmaj.out");
struct hashh {
int nrEl;
int vect[maxx/2];
};
int M;
void incarcaHash ( hashh H[] ){
for ( int i = 0; i< maxx; i++ ){
H[i].nrEl = 0;
}
}
void citireSir ( int sir[], int& lungime ){
f >> lungime;
M = sqrt(lungime)+1;
for ( int i = 0; i< lungime; i++ )
f >> sir[i];
//f.close();
}
void inserare ( int& lungime, int sir[], int val ){
if ( lungime == 0 ){
sir[lungime ] = val;
lungime ++;
}else{
int i = lungime - 1;
lungime ++;
while ( sir[i] > val ){
sir[i+1] = sir[i];
i--;
}
sir[i+1] = val;
}
}
void adaugaInformatiiHash ( int sir[], int lungime, hashh H[] ){
for ( int i = 0; i< lungime; i++ ){
inserare( H[sir[i]%M].nrEl, H[sir[i]%M].vect, sir[i]);
}
}
int cautaElement_majoritar ( hashh H[], int lungime){
for ( int i = 0; i< M; i++ ){
if( H[i].nrEl >= lungime/2 ){
if ( H[i].vect[0] == H[i].vect[H[i].nrEl / 2 ])
return H[i].vect[0];
}
}
return -1;
}
int main()
{
int sir[maxx], lungime;
hashh H[maxx];
citireSir(sir, lungime);
incarcaHash(H);
adaugaInformatiiHash(sir, lungime, H);
g << cautaElement_majoritar(H, lungime);
f.close();
g.close();
return 0;
}