#include <iostream>
#include<bits/stdc++.h>
using namespace std;
unordered_map<string,vector<string>>Favorite_Genres(unordered_map<string,vector<string>>userSongs,unordered_map<string,vector<string>>songGenres)
{
unordered_map<string,string>song_to_song;
unordered_map<string,unordered_map<string,int>>user_to_song;
unordered_map<string,vector<string>>res;
for(auto a:songGenres)
{
for(auto b:a.second)
{
song_to_song[b]=a.first;
}
}
for(auto a:userSongs)
{
int mx=INT_MIN;
for(auto b:a.second)
{
user_to_song[a.first][song_to_song[b]]++;
if(mx<user_to_song[a.first][song_to_song[b]])
{
mx=user_to_song[a.first][song_to_song[b]];
res[a.first].clear();
res[a.first].push_back(song_to_song[b]);
}
else if(mx==user_to_song[a.first][song_to_song[b]])
{
res[a.first].push_back(song_to_song[b]);
}
}
}
return res;
}
int main() {
// your code goes here
unordered_map<string,vector<string>> userSongs = {
{"David", {"song1", "song2", "song3", "song4", "song8"}},
{"Emma", {"song5", "song6", "song7"}}
};
unordered_map<string,vector<string>>songGenres = {
{"Rock", {"song1", "song3"}},
{"Dubstep", {"song7"}},
{"Techno", {"song2", "song4"}},
{"Pop", {"song5", "song6"}},
{"Jazz", {"song8", "song9"}}
};
auto res=Favorite_Genres(userSongs,songGenres);
for(auto a:res)
{
cout<<a.first<<" ";
for(auto b:a.second)
{
cout<<b<<" ";
}
cout<<endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1bm9yZGVyZWRfbWFwPHN0cmluZyx2ZWN0b3I8c3RyaW5nPj5GYXZvcml0ZV9HZW5yZXModW5vcmRlcmVkX21hcDxzdHJpbmcsdmVjdG9yPHN0cmluZz4+dXNlclNvbmdzLHVub3JkZXJlZF9tYXA8c3RyaW5nLHZlY3RvcjxzdHJpbmc+PnNvbmdHZW5yZXMpCnsKCXVub3JkZXJlZF9tYXA8c3RyaW5nLHN0cmluZz5zb25nX3RvX3Nvbmc7Cgl1bm9yZGVyZWRfbWFwPHN0cmluZyx1bm9yZGVyZWRfbWFwPHN0cmluZyxpbnQ+PnVzZXJfdG9fc29uZzsKCXVub3JkZXJlZF9tYXA8c3RyaW5nLHZlY3RvcjxzdHJpbmc+PnJlczsKCWZvcihhdXRvIGE6c29uZ0dlbnJlcykKCXsKCQlmb3IoYXV0byBiOmEuc2Vjb25kKQoJCXsKCQkJc29uZ190b19zb25nW2JdPWEuZmlyc3Q7CgkJfQoJfQoJZm9yKGF1dG8gYTp1c2VyU29uZ3MpCgl7CgkJaW50IG14PUlOVF9NSU47CgkJZm9yKGF1dG8gYjphLnNlY29uZCkKCQl7CgkJCXVzZXJfdG9fc29uZ1thLmZpcnN0XVtzb25nX3RvX3NvbmdbYl1dKys7CgkJCWlmKG14PHVzZXJfdG9fc29uZ1thLmZpcnN0XVtzb25nX3RvX3NvbmdbYl1dKQoJCQl7CgkJCQlteD11c2VyX3RvX3NvbmdbYS5maXJzdF1bc29uZ190b19zb25nW2JdXTsKCQkJCXJlc1thLmZpcnN0XS5jbGVhcigpOwoJCQkJcmVzW2EuZmlyc3RdLnB1c2hfYmFjayhzb25nX3RvX3NvbmdbYl0pOwoJCQl9CgkJCWVsc2UgaWYobXg9PXVzZXJfdG9fc29uZ1thLmZpcnN0XVtzb25nX3RvX3NvbmdbYl1dKQoJCQl7CgkJCQlyZXNbYS5maXJzdF0ucHVzaF9iYWNrKHNvbmdfdG9fc29uZ1tiXSk7CgkJCX0KCQl9Cgl9CglyZXR1cm4gcmVzOwp9CmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQp1bm9yZGVyZWRfbWFwPHN0cmluZyx2ZWN0b3I8c3RyaW5nPj4JdXNlclNvbmdzID0geyAgCiAgIHsiRGF2aWQiLCB7InNvbmcxIiwgInNvbmcyIiwgInNvbmczIiwgInNvbmc0IiwgInNvbmc4In19LAogICB7IkVtbWEiLCAgeyJzb25nNSIsICJzb25nNiIsICJzb25nNyJ9fQp9Owp1bm9yZGVyZWRfbWFwPHN0cmluZyx2ZWN0b3I8c3RyaW5nPj5zb25nR2VucmVzID0geyAgCiAgIHsiUm9jayIsICAgIHsic29uZzEiLCAic29uZzMifX0sCiAgIHsiRHVic3RlcCIsIHsic29uZzcifX0sCiAgIHsiVGVjaG5vIiwgIHsic29uZzIiLCAic29uZzQifX0sCiAgIHsiUG9wIiwgICAgIHsic29uZzUiLCAic29uZzYifX0sCiAgIHsiSmF6eiIsICAgIHsic29uZzgiLCAic29uZzkifX0KfTsKYXV0byByZXM9RmF2b3JpdGVfR2VucmVzKHVzZXJTb25ncyxzb25nR2VucmVzKTsKZm9yKGF1dG8gYTpyZXMpCnsKCWNvdXQ8PGEuZmlyc3Q8PCIgIjsKCWZvcihhdXRvIGI6YS5zZWNvbmQpCgl7CgkJY291dDw8Yjw8IiAiOwoJfQoJY291dDw8ZW5kbDsKfQoJcmV0dXJuIDA7Cn0=