Решение задачи №946 «Полка» с ACMP
Условие задачи
У Андрея есть младший брат Ванечка, который очень любит смотреть мультики. Ванечка вечно разбрасывал по дому и терял свои DVD с мультиками. Поэтому на день рождения Андрей подарил брату длинную полку для того, чтобы Ванечка ставил на нее свои диски. Чтобы на полке был порядок, Андрей просил Ванечку соблюдать простой порядок:
если на полке нет ни одного диска, то Ванечка просто ставит его;
если диск есть, то Ванечка ставит диск либо справа, либо слева от уже расставленных;
забирает диски он так же, то есть снимает только с правого или левого края.
И теперь Андрей хочет узнать, выполнил Ванечка его инструкции или нет.
Входные данные
В первой строке входного файла INPUT.TXT указано целое число N (1 ≤ N ≤ 10000) - количество операций, которые выполнил Ванечка. Далее в N строках находится информация об операциях. Каждая операция постановки диска на полку описывается парой чисел. Первое из них (1 или 2) показывает, что диск ставится с левого края или с правого края соответственно. Второе целое число (от 0 до 10000) обозначает номер диска. Операции снятия диска с полки описывается одним числом 3 или 4, обозначающим с левого и правого края полки соответственно снимается диск.
В начальный момент полка пуста. Гарантируется, что последовательность операций корректна, нет команд снятия диска с пустой полки.
Выходные данные
В выходной файл OUTPUT.TXT для каждой операции снятия диска с полки выведите его номер.
Решение на C++
#include<iostream>
#include<deque>
using namespace std;
int main(){
int n,k,d;deque<int>s;
cin>>n;
while(n){
cin>>k;
if(k<3){cin>>d;
if(k==1)s.push_front(d);
else s.push_back(d);}
else {
if(k==3){d=s.front();
s.pop_front();}
else {d=s.back();
s.pop_back();}
cout<<d<<' ';}
n--;}
return 0;}
Условия задач взяты с сайта acmp.ru