Входной файл: | input.txt | Ограничение времени: | 60 сек | |
Выходной файл: | output.txt | Ограничение памяти: | 4000 Мб |
Необходимо реализовать функцию CaesarEncrypt
обрабатывающую шифром Цезаря (правый сдвиг на 3) входную строку
в несколько потоков
Гарантируется, что строка будет состоять только из маленьких латинских букв в кодировке ASCII
void CaesarEncrypt(std::string* s);
Функция должна отрабатывать быстрее (по системному времени), чем следующая:
void CaesarEncryptOneThread(std::string* s)
{
for (char& c : *s)
c = 'a' + (c + 3 - 'a') % 26;
}
Файл с решением должен содержать функцию CaesarEncrypt
Входной файл: | Стандартный вход | Ограничение времени: | 15 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 4000 Мб |
Вам дан класс с основными функциями для реализации матриц со следующим интерфейсом.
class DenseMat {
public:
DenseMat(int32_t rows = 0, int32_t cols = 0);
DenseMat(int32_t rows, int32_t cols, const std::vector<int32_t>& data);
int32_t Rows() const;
int32_t Cols() const;
const int32_t& operator()(int row, int col) const;
int32_t& operator()(int row, int col);
bool operator==(const DenseMat& other) const;
bool operator!=(const DenseMat& other) const;
};
Требуется реализовать функцию DenseMat MatMulParal(const DenseMat& a, const DenseMat& b, int thread_count);
, которая выдает результат умножения матрицы a
на матрицу b
.
Функция должна использовать алгоритм параллельного умножения матриц, используя thread_count
потоков.
При перемножении матриц вычисление каждого i, j-го элемента матрицы-результата не зависит от порядка вычисления остальных элементов,
поэтому вы можете вычислять отдельные части матрицы-результата независимо в разных потоках без синхронизации между ними.
Тестирующая система будет проверять, что:
Входной файл: | Стандартный вход | Ограничение времени: | 5 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 4000 Мб |
Вам необходимо реализовать thread-safe очередь со следующими методами:
template <typename T>
class Queue {
public:
T Pop();
size_t Size();
template <typename U>
void Push(???);
template <typename ... U>
void Emplace(???);
};
Очередь должна уметь работать с объектами без конструктора копирования.