Cod sursa(job #2788638)

Utilizator enedumitruene dumitru enedumitru Data 26 octombrie 2021 10:02:01
Problema Elementul majoritar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
/// complexitate O(n*log n) 90 pct.
#include <bits/stdc++.h>
using namespace std;
ifstream f("elmaj.in"); ofstream g("elmaj.out");
int n,a[1000001];
int dig[3][1000];
int main()
{   f>>n;
    for(int i=0;i<n;i++) f>>a[i];
    for(int i=0;i<n;i++)
    {   int aux=a[i];
        for (int j=0;j<3;j++) {dig[j][aux%1000]++; aux/=1000;}
    }
    int ret=0;
    for(int i=0;i<=999;i++)
    {   if(dig[0][i]> n/2) ret+=i;
        if(dig[1][i]> n/2) ret+=i*1000;
        if(dig[2][i]> n/2) ret+=i*1000000;
    }
    int nr = 0;
    for (int i = 0; i < n; i++)
         if(a[i]==ret) nr++;
    if(nr>n/2) g<<ret<<' '<<nr; else g<<-1;
    g.close(); f.close(); return 0;
}
/**
int digitMajority(int n, int[] a) {
    int[][] dig = new int[3][1000];
    for (int i = 0; i < n; i++) {
        int aux = a[i];
        for (int j = 0; j < 3; j++) {
            dig[j][aux % 1000]++;
            aux /= 1000;
        }
    }
    int ret = 0;
    for (int i = 0; i < 999; i++) {
        if (dig[0][i] > n/2)
            ret += i;
        if (dig[1][i] > n/2)
            ret += i * 1000;
        if (dig[2][i] > n/2)
            ret += i * 1000000;
     }
     int nr = 0;
     for (int I = 0; I < n; i++) {
         if (a[i] == ret)
             nr++;
     }
     if (nr > n/2)
         return ret;
     else
         return -1;
}
*/