Ограничения: время – 250ms/500ms, память – 128MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод
Послать решение Blockly Посылки Темы Где Обсудить (0)
Написать класс для односвязного списка, в котором нет операций вставки и удаления. Добавить функцию сцепления списков conc
с вариантами вызова conc(T,SList<T>), conc(SList<T>,T), conc(SList<T>, SList<T>), которая выполняется за O(1).
Объекты SList могут использоваться в сцеплении не более 1 раза.
```c++
template <typename T>
class SList {
struct node { T value; node *next; } *first=nullptr, *last=nullptr;
int len=0;
public:
SList(); // пустой список
SList(const T& value); // список из одного значения, для упрощения conc
class iterator { SList *list; node *prev; // для вставки
public: // ++, * и ==
...};
...
};
```
(Пример использования — создание структур при компиляции программы,
каждая структура соответствует какому-то куску исходного кода, однажды созданная структура уже не меняется,
но может становиться частью других структур)
---
АТД Список
конструктор (пустой список) // std::list<int> s;
длина списка // int len=s.size();
получение итератора на первый элемент (конец списка) // auto it=s.begin(), e=s.end();
сцепление списков
---
АТД Итератор списка
Следующий // ++it;
Конец списка // it==s.end();
Значение элемента // *it