Cod sursa(job #3137911)

Utilizator ChopinF69Lazar Alexandru ChopinF69 Data 16 iunie 2023 00:16:35
Problema Secventa 2 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.29 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("prim.in");
ofstream fout("prim.out");
int n,cerinta;
int v[10005],fr[25];
map<long long,int>M;
int pc(int n)
{
    while(n>9)n/=10;
    return n;
}
int main()
{
    fin>>n>>cerinta;
    if(cerinta==1)
    {
        int maxi=-1;
        for(int i=1;i<11;i++)
            fr[i+10]=INT_MAX;
        for(int i=1;i<=n;i++)
            {
                fin>>v[i];
                int primaC=pc(v[i]);//prima cifra
                fr[primaC]++;//crestem de cate ori apare
                if(fr[primaC]>maxi)//vedem frecventa maxima
                {
                    maxi=fr[primaC];//actualizam maxim
                }
                if(fr[primaC+10]>v[i])//facem minimul in fiecare grupa
                {
                    fr[primaC+10]=v[i];
                }
            }
        int mini=INT_MAX;
        for(int i=1;i<=9;i++)
        {
            //cout<<fr[i];
            if(fr[i]==maxi)
            {
                //fout<<fr[i+10]<<" ";
                mini=min(mini,fr[i+10]);
            }
        }
        fout<<mini;
    }
    else
    {
        for(int i=1;i<=n;i++)
            fin>>v[i];
        //vom genera cate un hash pentru fiecare combinatie de frecvente
        //un numar foarte mare care sper sa nu se repete

        int hashV[15];
        hashV[0]=5;
        hashV[1]=13;
        hashV[2]=17;
        hashV[3]=23;
        hashV[4]=31;
        hashV[5]=59;
        hashV[6]=67;
        hashV[7]=73;
        hashV[8]=83;
        hashV[9]=97;

        for(int i=1;i<=n;i++)
        {
            long long s=0;
            int frecv[15];
            for(int j=0;j<10;j++)
                frecv[j]=0;
            while(v[i]!=0)
            {
                int c=v[i]%10;
                v[i]/=10;
                frecv[c]=1;
                //s+=hashV[c];
            }
            for(int j=0;j<10;j++)
                s+=hashV[frecv[j]];
            M[s]++;
        }
        int gMaxi=-1;
        std::map<long long, int>::iterator it = M.begin();
        while (it != M.end())
        {
            //fout<<it->first<<" "<<it->second<<endl;
            if(it->second > gMaxi)gMaxi=it->second;
            ++it;
        }
        fout<<gMaxi;
    }
}