ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1494. Монобильярд

Пара тестов
Послано DarkSun1997 18 июл 2017 18:04
Есть наверно несколько решений этой задачи.
Я использовал стек пар. first это было верхняя грань пары, second нижняя.
Как только я считал число, я посмотрел на первый элемент в стеке на его верхнюю грань, если она совпадала, то я понижал грань на -1, если в стеке еще и грани местами менялись то есть first<second, то удалял элемент.
Если же элемент который я считал был меньше чем верхняя грань первого элемента в стеке, то выводил фразу читер!!!!
Если стек оказывался пустым или элмент считывания оказывался больше чем верхняя грань первого элемента, то создавал новую пару и ее грани first присваивал считанное значение, а second присваивал значение h. h это число которое в начале было равно 1 а после добавления нового элемента в стек становилось считанное число +1. Оно менялось у меня только когда добавлял что-то.
Потом проверял если новый элемент стека верхняя и нижняя грань совпадает то удалял его, иначе понижал нверхнюю границу на -1.
Если в конце чтения стек становился пустым, то значит выводим фразу Not a proof.
К сожалению нельзя кидать код программ...
Но могу поделиться парой тестов:

5
3
2
5
4
1
Not a proof

5
3
5
2
4
1
Cheater

4
3
4
1
2
Cheater
Re: Пара тестов
Послано Mahilewets 18 июл 2017 20:48
Да это адская задача,  я уже решаю года полтора безуспешно
Решение не пытаюсь посмотреть принципиально
Ничего не помогает решить
Re: Пара тестов
Послано Oleg Baskakov 19 июл 2017 02:56
Ничего тут сложного нет, просто симулируем сам процесс закатывания.
Разберём например тест 10 5 8 7 6 4 10 2 1 3 9.
Пускай мы встретили во входе 5, значит докидываем в массив 1 2 3 4 5. Затем процесс удаления: сравниваем 5 из входа с последним элементом, они равны, значит становится 1 2 3 4.
Потом встретили 8, оно больше нашего последнего закинутого шара, докидываем 6 7 8, получаем 1 2 3 4 6 7 8. И повторяем процесс удаления, описанный выше.
Потом допустим 7, 6, 4, и каждый раз число из входа совпадает с последним элементом массива. Поудаляли, получили 1 2 3.
Потом получаем 10, оно больше последнего закинутого шара, докидываем в массив, получаем 1 2 3 9 10 (и сразу же удаляем, получаем 1 2 3 9).
Потом получаем 2, но последний элемент 9, а не 2, и тут мы понимаем, что ответ Cheater.
Re: Пара тестов
Послано Mahilewets 19 июл 2017 08:45
Ну я не смотрю решений.
Сам додуматься не могу.
Я хочу как-нибудь ссимулировать.
Не могу придумать,  как это сделать.
Лучше скажите мне,  что решить,  какие задачи,  которые бы меня подготовили к решению этой.
Re: Пара тестов
Послано Oleg Baskakov 19 июл 2017 10:29
Да тот же 1220 stacks, который вы недавно пытались решать.
Разница лишь в следующем:
— там много стаков, а тут один
— тут только pop-запросы
— pop-запрос, который больше всех предыдущих, автоматически означает, что перед ним надо допушить недостающие шары.
Re: Пара тестов
Послано Mahilewets 19 июл 2017 11:28
Ну я сделал двусвязный список в статическом массиве
И проверял всегда ли верно
Что я беру либо непосредственно следующий шар из оставшихся
Либо любой шар выше
Re: Пара тестов
Послано Oleg Baskakov 19 июл 2017 12:07
Поздравляю с AC :)
P. S. Двусвязный список, кстати, не обязателен, я делал просто массив, и у меня была переменная для текущего размера массива, и если удаляем элемент, то я просто её уменьшал, а если добавляем, то увеличивал и менял элемент на новый.

Edited by author 19.07.2017 12:11