Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <map>
- #include <string>
- #include <math.h>
- #include <set>
- using namespace std;
- int main()
- {
- unsigned k;
- cin >> k;
- map<string, unsigned> names;
- map<string, set<string>> pairs;
- bool error = false;
- for (unsigned i = 0; i < pow(2, k) - 1; i++)
- {
- string s1, s2;
- std::cin >> s1 >> s2;
- // считаем количество игр у каждого игрока
- if (names.count(s1) > 0)
- names[s1]++;
- else names[s1] = 1;
- if (names.count(s2) > 0)
- names[s2]++;
- else names[s2] = 1;
- // проверяем чтобы два игрока не играли дважды
- if (pairs[s1].count(s2) > 0) error = true;
- if (pairs[s2].count(s1) > 0) error = true;
- pairs[s1].insert(s2);
- pairs[s2].insert(s1);
- }
- if (error)
- {
- cout << "NO SOLUTION";
- return 0;
- }
- //
- map<unsigned, unsigned> count; // количество игроков по количеству
- for (auto name : names)
- {
- count[name.second]++;
- }
- // проверяем чтобы у всех игроков было корректное количество игр
- // кажется, тут какая-то херня
- unsigned ppl = pow(2, k) / 2;
- for (int i = 1; i < k; i++)
- {
- if (count[i] != ppl) error = true;
- ppl /= 2;
- }
- if (count[k] != 2) error = true;
- if (error)
- {
- cout << "NO SOLUTION";
- return 0;
- }
- set<string> result;
- for (auto name : names)
- {
- if (name.second == k)
- result.insert(name.first);
- }
- for (auto r : result)
- cout << r << " ";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement