Cod sursa(job #1020924)

Utilizator hellol30FMI Macovei Daniel hellol30 Data 2 noiembrie 2013 20:48:56
Problema Elementul majoritar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <cstdio>
#include <cstdlib>
#define Nmax 1000005
#define baza 10000
using namespace std;
int a[Nmax],n,m,b[Nmax];
int bucket[baza];
 int k=1,t,ma=0;

void radixsort(int n)
{
  int exp = 1;
 
  while (m / exp > 0)
  {
    for(register int i=0;i<baza;i++) bucket[i]=0;
    for(register int i = 0; i < n; i++) 
		 bucket[ (a[i] / exp) % baza]++;
    for (int i = 1; i < baza; i++) 
		bucket[i] += bucket[i - 1];
    for (int i = n - 1; i >= 0; i--)
		 b[ --bucket [(a[i] / exp) % baza]] = a[i] ;
    a[1]=b[1]; k=1;
	for (int i = 1; i < n; i++) 
		{a[i] = b[i];
		 if(a[i]==a[i-1]) k++;
		else {if(ma<k) {ma=k; t=a[i];} k=1;} 
		}
	if(ma>n/2) {break;}
    exp *= baza;
  }
}
int main()
{ freopen("elmaj.in","rt",stdin);
  freopen("elmaj.out","wt",stdout);
  scanf("%d", &n);
  for (int i = 0; i < n; i++)
    {scanf("%d", &a[i]);
	 m=(a[i]>m) ? a[i] : m;
	}
  radixsort(n);
 
  if(ma > n/2) printf("%d %d\n",t,ma);
    else printf("-1\n");
  return 0;
}