Проблема организации турнира
Дано положительное целое число N , представляющее количество игроков, играющих в игру. Игра ведется между двумя командами так, что каждая команда состоит как минимум из одного игрока, но общее количество игроков в игре должно быть N. Игра длится ровно 30 минут , задача состоит в том, чтобы проверить, будут ли все игроки играть в игру друг против друга или нет. Если в игру можно играть до T часов и разрешено играть в игру более 1 раза. Если найдено верно, выведите «Возможно» . В противном случае выведите «Невозможно» .
Примеры:
Input: N = 3, T = 1
Output: Possible
Explanation:
In 1st half hours Players { p1, p2 } played the game against { p3 }.
In 2d half hours Players { p2, P3 } played the game against { p1 }
Since all players played the game against each other within T(=1) hours. Therefore, the required output is “Possible”.Input: N = 4, T = 0.5
Output: Not Possible
Explanation:
In 1st half hours Players { p1, p2 } played the game against { p3, p4 }.
Since player p1 did not play the game against p2 within T(=0.5) hours. Therefore, the required output is “Not Possible”.
Подход: проблема может быть решена с помощью жадной техники. Ниже приведены наблюдения:
- In each game, if one of the two teams has only one player then the game must be played N – 1 times.
- In each game, If one of the team have N / 2 players and other team have (N + 1) / 2 then the game must be played (N + 1) / 2 times.
Выполните следующие шаги, чтобы решить проблему:
- Если общее время игры N-1 раз меньше или равно T , то выведите «Возможно» .
- Если общее время игры (N + 1) / 2 раза меньше или равно T , то выведите «Возможно» .
- В противном случае выведите «Невозможно» .
Ниже приведена реализация вышеуказанного подхода:
Временная сложность: O(1)
Вспомогательное пространство: O(1)