Задача про сортировку вагонов на языке Python 3. Ограничение по медли

Задачка про сортировку вагонов на языке Python 3.

Ограничение по времени работы программы: 1 секунда

К тупику со стороны пути 1 (см. набросок) подъехал поезд. Разрешается отцепить от поезда один или сходу несколько первых вагонов и завезти их в тупик (при желании, можно даже завезти в тупик сходу весь поезд). После этого часть из этих вагонов вывезти в сторону пути 2. После этого можно завезти в тупик еще несколько вагонов и опять часть оказавшихся вагонов вывезти в сторону пути 2. И так дальше (так, что каждый вагон может только один раз заехать с пути 1 в тупик, а потом один раз выехать из тупика на путь 2). Заезжать в тупик с пути 2 либо выезжать из тупика на путь 1 воспрещается. Нельзя с пути 1 попасть на путь 2, не заезжая в тупик.
Знаменито, в каком порядке изначально идут вагоны поезда. Требуется с поддержкою обозначенных операций сделать так, чтоб вагоны поезда шли по порядку (поначалу 1-ый, потом 2-ой и т.д., считая от головы поезда, едущего по пути 2 в сторону от тупика). Напишите программку, определяющую, можно ли это сделать.

ВХОДНЫЕ ДАННЫЕ

Первая строчка входных данных содержит число N количество вагонов в поезде (1N100). Дальше идут номера вагонов в порядке от головы поезда, едущего по пути 1 в сторону тупика. Вагоны пронумерованы естественными числами от 1 до N, каждое из которых встречается ровно один раз.

ВЫХОДНЫЕ ДАННЫЕ

Если сделать так, чтоб вагоны шли в порядке от 1 до N, считая от головы поезда, когда поезд поедет по пути 2 из тупика, можно, выведите извещенье YES, если это сделать нельзя, выведите NO.

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

l = int(input())
s = list(map(int, input().split()))

tup = [] тупик
tr2 = [] путь 2
for i in range(l):
if s[i] gt; 1:
if len(tr2) != 0 and s[i] == tr2[-1] + 1:
tr2.append(s[i])
continue
else:
tup.append(s[i])
continue
elif s[i] == 1:
tr2.append(s[i])

tup.reverse()
tr2 += tup

if sorted(tr2) == tr2:
print('YES')
else:
print('NO')

Задать свой вопрос
1 ответ
Ваше решение не учитывает способности выезда доли вагонов из тупика, все вагоны, попавшие в тупик, почему-то могут выехать из него только в конце. В итоге неверный ответ, к примеру, на тесте 2 1 3 - выдаст NO заместо YES (Нужная последовательность действий: 2 - в тупик, 1 - через тупик на путь 2, 2 - из тупика на путь 2, 3 - через тупик на путь 2).

Вот что-то, приближенное к вашему решению, осматривающее и эту возможность:

l = int(input())
s = list(map(int, input().split()))
 
tup = [0] тупик
tr2 = [0] путь 2
 
for i in range(l):
    while tup[-1] == tr2[-1] + 1:
        tr2.append(tup[-1])
        tup.pop()
    if s[i] == tr2[-1] + 1:
        tr2.append(s[i])
    else:
        tup.append(s[i])
 
while tup[-1] == tr2[-1] + 1:
    tr2.append(tup[-1])
    tup.pop()
 
if tr2[-1] == l:
    print('YES')
else:
    print('NO')
, оставишь ответ?
Имя:*
E-Mail:


Добро пожаловать!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт