Разве мы не можем использовать иностранные библиотеки, когда задаем вопросы о codechef и других известных сайтах по кодированию? - PullRequest
0 голосов
/ 17 января 2019

Я задавал вопрос о codechef и застрял в этой проблеме: https://www.codechef.com/problems/TLG

В этой задаче мы должны ввести нет. который будет нет. тестовых случаев задачи. Затем нам нужно будет ввести еще два целых числа. Эти целые числа возьмут счет игроков в формате "a b". Наконец, программа отобразит преимущество в матче, в котором конкретный игрок имел максимальное преимущество, и номер игрока (т.е. 1 или 2). Моя программа такова:

import operator
from operator import itemgetter
p = []
k = []
u = []

for r in range(int(input())):
    one,two = input().split()
    one = int(one)
    two = int(two)
    p.append((one,two))

for (one,two) in p:
    if (one)> (two):
        y = (one) - (two)
        m =1

    else:
        y = (two) - (one)
        m = 2

    k.append((m,y))

foo = k
foo.sort(key=lambda x:x[1])

h = foo[-1]

u.append(h)
b = list(map(operator.itemgetter(0), u))
r = list(map(operator.itemgetter(1), u))

print(b[0],r[0])

В чем проблема в моей программе? Сайт показал, что мой ответ неверный. Тогда я искал другие представления и нашел:

t = int(input())


p1 = 0
p2 = 0 
maxi = 0
leader = 1

for i in range(t):
    x,y = map(int,input().split())
    p1+=x
    p2+=y
    if abs(p1-p2) > maxi:
        leader = 1 if p1 > p2 else 2 
        maxi = abs(p1-p2)

print('{} {}'.format(leader,maxi))

Я хочу знать, как эта программа печатает максимальный отрыв и проигрыватель. Он не использует функции массива и сортировки, тогда как он запоминает все выходные данные и их значения.

1 Ответ

0 голосов
/ 17 января 2019

Программе не нужно хранить историю ввода. Все, что вам нужно, это лучший результат на данный момент - размер лидера и игрок, который его удерживал. Вы накапливаете счет, раунд за раундом. В конце каждого раунда вы проверяете, больше ли текущий отвод, чем предыдущий максимум. Если это так, вы обновляете.

Ваша первая проблема заключается в том, что вы проверяете разницу в баллах в каждом раунде, а не в сумме баллов. Ваш код работает для данного примера, в котором максимальный спред случается в конце первого раунда. Вам нужно найти максимальное опережающее , а не просто наибольшую разницу за данный раунд.

Я ожидаю, что проблема заключается в том, что вы затрачиваете лишние деньги на хранение всех результатов, а затем сортировка их всех приводит к превышению лимита времени сайта. Вы не нуждаетесь в отсортированном списке, просто максимальное значение.

...