Advertisement
Guest User

Untitled

a guest
May 25th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.58 KB | None | 0 0
  1. #include <iostream>
  2. #include <map>
  3. #include <string>
  4. #include <math.h>
  5. #include <set>
  6.  
  7. using namespace std;
  8.  
  9. int main()
  10. {
  11.     unsigned k;
  12.     cin >> k;
  13.     map<string, unsigned> names;
  14.     map<string, set<string>> pairs;
  15.  
  16.     bool error = false;
  17.     for (unsigned i = 0; i < pow(2, k) - 1; i++)
  18.     {
  19.         string s1, s2;
  20.         std::cin >> s1 >> s2;
  21.        
  22.         // считаем количество игр у каждого игрока
  23.         if (names.count(s1) > 0)
  24.                 names[s1]++;
  25.             else names[s1] = 1;
  26.  
  27.         if (names.count(s2) > 0)
  28.                 names[s2]++;
  29.             else names[s2] = 1;
  30.        
  31.         // проверяем чтобы два игрока не играли дважды
  32.         if (pairs[s1].count(s2) > 0) error = true;
  33.         if (pairs[s2].count(s1) > 0) error = true;
  34.        
  35.         pairs[s1].insert(s2);
  36.         pairs[s2].insert(s1);
  37.     }
  38.     if (error)
  39.     {
  40.         cout << "NO SOLUTION";
  41.         return 0;
  42.     }
  43.    
  44.     //
  45.     map<unsigned, unsigned> count; // количество игроков по количеству
  46.     for (auto name : names)
  47.     {
  48.         count[name.second]++;
  49.     }
  50.    
  51.     // проверяем чтобы у всех игроков было корректное количество игр
  52.     // кажется, тут какая-то херня
  53.     unsigned ppl =  pow(2, k) / 2;
  54.     for (int i = 1; i < k; i++)
  55.     {
  56.         if (count[i] != ppl) error = true;
  57.         ppl /= 2;
  58.        
  59.        
  60.     }
  61.     if (count[k] != 2) error = true;
  62.     if (error)
  63.     {
  64.         cout << "NO SOLUTION";
  65.         return 0;
  66.     }
  67.    
  68.    
  69.     set<string> result;
  70.     for (auto name : names)
  71.     {
  72.         if (name.second == k)
  73.             result.insert(name.first);
  74.     }
  75.    
  76.     for (auto r : result)
  77.         cout << r << " ";
  78.    
  79.     return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement