Как болельщик команды « BE » с относительно умеренным успехом , к концу сезона я часто задаюсь вопросом, есть ли у моей любимой команды еще теоретический шанс стать чемпионом. Ваша задача в этом вызове - ответить на этот вопрос для меня.
вход
Вы получите три входа: текущую таблицу, список оставшихся матчей и текущую позицию команды, которая нас интересует.
Input 1: текущая таблица , последовательность чисел , были я -й числом являются точками , полученной командой я до сих пор. Например, вход
[93, 86, 78, 76, 75]
кодирует следующую таблицу (важен только последний столбец):
Вход 2 : оставшиеся совпадения , последовательность кортежей, где каждый кортеж ( i , j ) обозначает оставшееся совпадение между командами i и j . В приведенном выше примере второй ввод [(1,2), (4,3), (2,3), (3,2), (1,2)]
будет означать, что остальные совпадения:
Chelsea vs Tottenham, Liverpool vs Man. City, Tottenham vs Man. City, Man. City vs Tottenham, Chelsea vs Tottenham
Input 3: текущее положение . Команды мы заинтересованы в том, например, ввод 2
для приведенного выше примера будет означать, что мы хотели бы знать , может ли Тоттенхэм еще стать чемпионом.
Вывод
Для каждого оставшегося совпадения формы ( i , j ) возможны три результата:
- Команда i выигрывает: команда i получает 3 очка , команда j получает 0 очков
- Команда j выигрывает: команда i получает 0 очков , команда j получает 3 очка
- Ничья: команда i и j оба получают 1 очко
Вы должны вывести истинное значение, если для всех оставшихся игр есть какой-то результат, такой, что в конце ни одна другая команда не наберет больше очков, чем команда, указанная в третьем входе. В противном случае выведите ложное значение.
Пример : рассмотрим примерный ввод из приведенного выше раздела:
Вход 1 = [93, 86, 78, 76, 75]
, Вход 2 = [(1,2), (4,3), (2,3), (3,2), (1,2)]
, Вход 3 =2
Если команда 2
выигрывает все оставшиеся матчи (то есть (1,2), (2,3), (3,2), (1,2)
), она получает 4 * 3 = 12 дополнительных очков; ни одна из других команд не получает очков в этих матчах. Допустим, другой оставшийся матч (то есть (4,3)
) - ничья. Тогда итоговые результаты будут такими:
Team 1: 93, Team 2: 86 + 12 = 98, Team 3: 78 + 1 = 79, Team 4: 76 + 1 = 77, Team 5: 75
Это означает, что мы уже нашли какой-то результат для оставшихся матчей, так что ни одна другая команда не набрала больше очков, чем команда 2
, поэтому результаты этого ввода должны быть достоверными.
подробности
- Можно считать , первый вход будет упорядоченная последовательность, т.е. для я < J , то я -й запись равна или больше , чем J -го вход. Первый ввод может быть взят в виде списка, строки или тому подобного.
- Вы можете взять второй вход как строку, список кортежей или тому подобное. В качестве альтернативы вы можете взять его в виде двумерного массива,
a
гдеa[i][j]
указано количество записей формы(i,j)
в списке оставшихся совпадений. Например,a[1][2] = 2, a[2][3] = 1, a[3][2] = 1, a[4][3] = 1
соответствует[(1,2), (4,3), (2,3), (3,2), (1,2)]
. - Для второго и третьего ввода вы можете принять 0-индексацию вместо 1-индексации.
- Вы можете взять три входа в любом порядке.
Пожалуйста, укажите точный формат ввода, который вы выбрали в своем ответе.
Побочный узел : было показано, что проблема, лежащая в основе этого задания, является NP-полной в « Уничтожении футбола трудно решить в соответствии с правилом из трех пунктов ». Интересно, что если за победу присуждаются только два очка, проблема становится разрешимой за полиномиальное время.
Тестовые случаи
Все тестовые случаи в формате Input1
, Input2
, Input3
.
Truthy:
[93, 86, 78, 76, 75]
,[(1,2), (4,3), (2,3), (3,2), (1,2)]
,2
[50]
,[]
,1
[10, 10, 10]
,[]
,3
[15, 10, 8]
,[(2,3), (1,3), (1,3), (3,1), (2,1)]
,2
Falsy:
[10, 9, 8]
,[]
,2
[10, 9, 9]
,[(2,3), (3,2)]
,1
[21, 12, 11]
,[(2,1), (1,2), (2,3), (1,3), (1,3), (3,1), (3,1)]
,2
победитель
Это код-гольф , поэтому выигрывает самый короткий правильный ответ (в байтах). Победитель будет выбран через неделю после публикации первого правильного ответа.