ENG  RUSTimus Online Judge
Online Judge
Problems
Authors
Online contests
About Online Judge
Frequently asked questions
Site news
Webboard
Links
Problem set
Submit solution
Judge status
Guide
Register
Update your info
Authors ranklist
Current contest
Scheduled contests
Past contests
Rules
back to board

Discussion of Problem 1494. Monobilliards

Пара тестов
Posted by DarkSun1997 18 Jul 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: Пара тестов
Posted by Mahilewets 18 Jul 2017 20:48
Да это адская задача,  я уже решаю года полтора безуспешно
Решение не пытаюсь посмотреть принципиально
Ничего не помогает решить
Re: Пара тестов
Posted by Oleg Baskakov 19 Jul 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: Пара тестов
Posted by Mahilewets 19 Jul 2017 08:45
Ну я не смотрю решений.
Сам додуматься не могу.
Я хочу как-нибудь ссимулировать.
Не могу придумать,  как это сделать.
Лучше скажите мне,  что решить,  какие задачи,  которые бы меня подготовили к решению этой.
Re: Пара тестов
Posted by Oleg Baskakov 19 Jul 2017 10:29
Да тот же 1220 stacks, который вы недавно пытались решать.
Разница лишь в следующем:
— там много стаков, а тут один
— тут только pop-запросы
— pop-запрос, который больше всех предыдущих, автоматически означает, что перед ним надо допушить недостающие шары.
Re: Пара тестов
Posted by Mahilewets 19 Jul 2017 11:28
Ну я сделал двусвязный список в статическом массиве
И проверял всегда ли верно
Что я беру либо непосредственно следующий шар из оставшихся
Либо любой шар выше
Re: Пара тестов
Posted by Oleg Baskakov 19 Jul 2017 12:07
Поздравляю с AC :)
P. S. Двусвязный список, кстати, не обязателен, я делал просто массив, и у меня была переменная для текущего размера массива, и если удаляем элемент, то я просто её уменьшал, а если добавляем, то увеличивал и менял элемент на новый.

Edited by author 19.07.2017 12:11