Dados os registros de chamadas de um grande número de usuários de telefones celulares, encontre o louco do bate-papo com mais ligações.
Formato de entrada: A
entrada primeiro fornece um número inteiro positivo N (≤10 5), que é o número de registros de chamadas. Próximas N linhas, cada linha fornece um registro de chamada. Para simplificar, apenas os números de telefone celular de 11 dígitos da parte chamadora e da parte receptora são listados aqui, separados por espaços.
Formato de saída:
Informe o número do telefone do chateador e a quantidade de ligações em uma linha, separados por espaços. Se tal pessoa não for única, o menor número entre os loucos e o número de chamadas são produzidos, e o número de loucos paralelos é fornecido adicionalmente.
Amostra de entrada:
4
13005711862 13588625832
13505711862 13088625832
13588625832 18087925832
15005713862 13588625832
Saída de amostra:
13588625832 3
Não aprendi o hashing, discuti o mapa sem cérebro, enviei-o várias vezes e mantive 12 pontos (um total de três pontos de teste, apenas um passou) e depois descobri que o significado da pergunta estava errado. Você precisa encontrar o valor máximo antes de ver se há empate. . Se houver empate, está tudo bem se você encontrar, você tem que contar quantos são iguais, incluindo ele mesmo
#include <iostream>
#include <map>
#include <algorithm>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
map<string,int> m;
int n;
cin >> n;
string s1,s2;
for(int i = 0;i<n;i++){
cin >> s1 >> s2;
m[s1]++;
m[s2]++;
}
int maxn = 0;
int cnt = 0;
string res;
for(auto it = m.begin();it!=m.end();it++){
if(it->second>maxn){
maxn = it->second;
res = it->first;
}
}
for(auto it = m.begin();it!=m.end();it++){
if(it->second==maxn){
cnt++;
}
}
if(cnt==1)
cout << res << " " << maxn;
else
cout << res << " " << maxn << " " << cnt;
return 0;
}