Задача A. Finite Field (Easy version)

Входной файл:Стандартный вход   Ограничение времени:5 сек
Выходной файл:Стандартный выход   Ограничение памяти:512 Мб

Условие

Вам необходимо написать .cpp файл с реализацией хедера num.h

В конструкторе Num необходимо сохранять значение value по модулю modulo. По умолчанию modulo равно нулю, в таком случае value сохраняется без взятия по модулю.

В конструкторе копирования требуется скопировать только значение value, при этом modulo задается равным нулю.

Материалы задачи

main.cpp

task.xml

num.h


Задача B. Finite Field (Hard version)

Входной файл:Стандартный вход   Ограничение времени:5 сек
Выходной файл:Стандартный выход   Ограничение памяти:512 Мб

Условие

Вам необходимо написать .cpp файл с реализацией хедера num.h

Материалы задачи

main.cpp

task.xml

num.h


Задача C. Set

Входной файл:Стандартный вход   Ограничение времени:1 сек
Выходной файл:Стандартный выход   Ограничение памяти:512 Мб

Условие

Необходимо реализовать Set — класс, в котором реализованы основные операции над множествами:

Set Union(const Set&) const,

Set Intersection(const Set&) const,

Set Difference(const Set&) const,

Set SymmetricDifference(const Set&) const.

Также необходимо реализовать конструктор Set(const std::vector&) и функции добавления, удаления и проверки наличия элемента во множестве:

void Add(int64_t),

void Remove(int64_t), bool Contains(int64_t) const.

Для доступа ко всем элементам множества реализовать функцию std::vector Data() const.

Предполагается, что класс будет использован для хранения целых чисел типа int64_t. Для хранения элементов следует использовать std::vector с соответствующим параметром шаблона.

Материалы задачи

main.cpp

task.xml

Формат выходных данных

Файл с решением должен содержать только реализацию описанного класса, без функции main.


Задача D. PrimeNumberGenerator

Входной файл:Стандартный вход   Ограничение времени:1 сек
Выходной файл:Стандартный выход   Ограничение памяти:512 Мб

Условие

Необходимо реализовать класс PrimeNumberGenerator — генератор простых чисел.

У класса должен быть конструктор, принимающий (int start), и функция int GetNextPrime(), возвращающая ближайшее справа от start-а простое число (включая start).

Функция GetNextPrime должна изменять состояние объекта — при повторном ее вызове нужно возвращать уже следующее простое число.

      
         
class PrimeNumberGenerator {
  public:
    explicit PrimeNumberGenerator(int start);
    int GetNextPrime();
};
      
  

Материалы задачи

main.cpp

task.xml

Формат выходных данных

Файл с решением должен содержать только реализацию описанного класса, без функции main.


Задача E. Date

Входной файл:Стандартный вход   Ограничение времени:1 сек
Выходной файл:Стандартный выход   Ограничение памяти:512 Мб

Условие

Реализовать класс Date со следующими методами:

Конструктор Date(int year, int month, int day)

Метод bool IsLeap() const, возвращающий true в случае, если год является високосным и false в противном случае.

Метод std::string ToString() const, возвращающий строковое представление даты в формате dd.mm.yyyy.

Метод Date DaysLater(int days) const, возвращающий дату, которая наступит спустя days дней от текущей.

Метод int DaysLeft(const Date& date) const, возвращающий разницу между указанной и текущей датой (в днях).

Материалы задачи

main.cpp

task.xml

Формат выходных данных

Файл с решением должен содержать только реализацию описанного класса, без функции main.


Задача F. BufferedReader

Входной файл:Стандартный вход   Ограничение времени:1 сек
Выходной файл:Стандартный выход   Ограничение памяти:512 Мб

Условие

Требуется реализовать класс BufferedReader со следующим интерфейсом:

        
class BufferedReader {
public:
    explicit BufferedReader(PackageStream* stream);
    int32_t Read(char* output_buffer, int32_t buffer_len);
};
        
    

В конструктор BufferedReader передается указатель на объект класса PackageStream (см. описание ниже), с помощью которого будут считываться пакеты некоторой длины.

Метод int32_t Read(char* output_buffer, int32_t buffer_len) записывает по указателю output_buffer пакет длины не более buffer_len и возвращает реальный размер записанного пакета (это число может быть меньше, чем заданная длина, если строка закончилась раньше).

Интерфейс класса PackageStream:

        
class PackageStream {
public:
    PackageStream(std::string source, int32_t package_len);

    int32_t PackageLen() const;
    int32_t ReadPackage(char* output_package);
};
        
    

В конструктор PackageStream передается строка source, из которой впоследствии побайтово будут считываться пакеты длины package_len и, собственно, длина пакетов package_len.

Метод int32_t PackageLen() возвращает длину пакета (package_len), который считывает метод ReadPackage.

Метод int32_t ReadPackage(char* output_package) записывает по указателю output_package пакет длины не более package_len и возвращает реальный размер записанного пакета.

Материалы задачи

main.cpp

task.xml

01.in

02.in

03.in

04.in

01.out

02.out

03.out

04.out

Формат выходных данных

Файл с решением должен содержать только реализацию описанного класса, без функции main.


0.462s 0.012s 71