Pagini recente » Cod sursa (job #693562) | Cod sursa (job #2507834) | Cod sursa (job #3211591) | Cod sursa (job #2326500) | Cod sursa (job #3137911)
#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;
}
}