Witam, niestety mój kod nie jest akceptowany przez Spoja(pomimo, że przykładowy input z treści zadania daje poprawny output). W skrócie mój program:
pobiera dane, wybiera imię i zamienia wszystkie litery na duże. Następnie wsadza to wsyzstko do mapy, która zalicza ilość wystąpień elementu. Potem kopiuję całą mapę do wektora(tak wiem, pewnie dałoby sie lepiej, ale jakoś to mi przyszło do głowy), który sortuję wzgledem liczby wystąpień. Tak posortowane dane wyświetlam.
#include <iostream>
#include<string>
#include<map>
#include<vector>
#include <algorithm>
using namespace std;
typedef std::pair<string, int> my_pair;
bool sort_pred(const my_pair & left, const my_pair & right)
{
return left.second > right.second;
}
int main ()
{
string nr,nazwisko,imie;
map<string, int> osoba;
vector<my_pair> data;
//wsadzamy imię do mapy, jak się powtorzy to zwiekszamy drugi parametr o 1
while (cin >> nr>>nazwisko>>imie)
{
for(int i=0;i<imie.length();i++)
{
if(imie[i] >90)
{
imie[i]=imie[i]-32;
}
}
++osoba[imie];
}
for (map<string, int>::const_iterator it = osoba.begin();it != osoba.end(); ++it)
{
data.push_back( make_pair( it->first, it->second ) );
}
sort(data.begin(), data.end(), sort_pred);
for(int i =0;i<data.size();i++)
{
cout<<data[i].first<<" "<<data[i].second<<endl;
}
}