fork download
  1. #include <iostream>
  2. #include <set>
  3. #include <map>
  4.  
  5. int main() {
  6. size_t n;
  7. std::string line;
  8. std::map<std::string, std::set<std::string>> d;
  9.  
  10. std::cin >> n;
  11. std::getline(std::cin,line);
  12.  
  13. while(n--)
  14. {
  15. std::getline(std::cin, line);
  16.  
  17. size_t pos1{}, pos2{line.find("-")}, commas{1};
  18.  
  19. for(char c: line) if(c == ',') ++commas;
  20.  
  21. line+=',';
  22.  
  23. std::string left(line, pos1, pos2-pos1-1), right(line, pos2+2, line.find(",", pos2+2)-pos2-2);
  24.  
  25. if(d.find(right)==d.end()) d[right] = std::set<std::string>{};
  26.  
  27. d[right].insert(left);
  28.  
  29. while(commas--)
  30. {
  31. pos1 = pos2+2;
  32. pos2 = line.find(",", pos1);
  33. right = std::string(line, pos1, pos2-pos1);
  34. if(d.find(right)==d.end()) d[right] = std::set<std::string>{};
  35. d[right].insert(left);
  36. }
  37.  
  38. }
  39.  
  40. std::cout << d.size() << '\n';
  41. for(auto i: d)
  42. {
  43. std::cout << i.first << " - ";
  44. auto j {i.second.begin()};
  45. auto jp{j}; ++jp;
  46. for(; jp!=i.second.end(); ++j, ++jp)
  47. std::cout << *j << ", ";
  48. std::cout << *j << '\n';
  49. }
  50.  
  51.  
  52.  
  53. return 0;
  54. }
Success #stdin #stdout 0s 4556KB
stdin
3
apple - malum, pomum, popula
fruit - baca, bacca, popum
punishment - malum, multa
stdout
7
baca - fruit
bacca - fruit
malum - apple, punishment
multa - punishment
pomum - apple
popula - apple
popum - fruit