diff --git a/3.cpp b/3.cpp new file mode 100644 index 00000000..413a60ed --- /dev/null +++ b/3.cpp @@ -0,0 +1,118 @@ +#include +#include + +void fillGaps(std::vector& arr) { + int n = arr.size(); // O(1) + + for (int i = 0; i < n; ++i) { + if (arr[i] == -1) { // O(1) + int left = i - 1; // O(1) + int right = i + 1; // O(1) + + // Ищем ближайшее значение слева + while (left >= 0 && arr[left] == -1) { // O(n) в худшем случае + left--; // O(1) + } + + // Ищем ближайшее значение справа + while (right < n && arr[right] == -1) { // O(n) в худшем случае + right++; // O(1) + } + + // Если оба соседа найдены, вычисляем среднее + if (left >= 0 && right < n) { // O(1) + arr[i] = (arr[left] + arr[right]) / 2; // O(1) + } + } + } +} +// таким образом О(n^2) +void testFillGaps() { + // Тест 1 + std::vector arr1; + arr1.push_back(1); + arr1.push_back(-1); + arr1.push_back(10); + arr1.push_back(4); + fillGaps(arr1); + std::cout << "Test 1: "; + for (int num : arr1) { + std::cout << num << " "; + } + std::cout << "\n"; // Ожидаемый результат: 1 5 10 4 + + // Тест 2: Массив без пропусков + std::vector arr2; + arr2.push_back(5); + arr2.push_back(10); + arr2.push_back(15); + arr2.push_back(20); + fillGaps(arr2); + std::cout << "Test 2: "; + for (int num : arr2) { + std::cout << num << " "; + } + std::cout << "\n"; // Ожидаемый результат: 5 10 15 20 + + // Тест 3: Массив с пропуском в начале + std::vector arr3; + arr3.push_back(-1); + arr3.push_back(2); + arr3.push_back(3); + fillGaps(arr3); + std::cout << "Test 3: "; + for (int num : arr3) { + std::cout << num << " "; + } + std::cout << "\n"; // Ожидаемый результат: 2 2 3 + + // Тест 4: Массив с пропуском в конце + std::vector arr4; + arr4.push_back(1); + arr4.push_back(2); + arr4.push_back(-1); + fillGaps(arr4); + std::cout << "Test 4: "; + for (int num : arr4) { + std::cout << num << " "; + } + std::cout << "\n"; // Ожидаемый результат: 1 2 2 + + // Тест 5: Массив с несколькими пропусками + std::vector arr5; + arr5.push_back(1); + arr5.push_back(-1); + arr5.push_back(-1); + arr5.push_back(4); + fillGaps(arr5); + std::cout << "Test 5: "; + for (int num : arr5) { + std::cout << num << " "; + } + std::cout << "\n"; // Ожидаемый результат: 1 2 3 4 + + // Тест 6: Пустой массив + std::vector arr6; + fillGaps(arr6); + std::cout << "Test 6: "; + for (int num : arr6) { + std::cout << num << " "; + } + std::cout << "\n"; // Ожидаемый результат: (пустой массив) + + // Тест 7: Массив с одним элементом + std::vector arr7; + arr7.push_back(100); + fillGaps(arr7); + std::cout << "Test 7: "; + for (int num : arr7) { + std::cout << num << " "; + } + std::cout << "\n"; // Ожидаемый результат: 100 +} + +int main() { + + testFillGaps(); + return 0; +} diff --git a/C3100-Malkov_Maksim_lab4 b/C3100-Malkov_Maksim_lab4 new file mode 100644 index 00000000..59b080ee --- /dev/null +++ b/C3100-Malkov_Maksim_lab4 @@ -0,0 +1,44 @@ +#include +#include + + +void Rec(std::vector& arr, int k, int start, int depth, std::vector& indices) { + int n = arr.size(); + + if (depth == k) { + int sum = 0; + for (int idx : indices) { + sum += arr[idx]; + } + if (sum == 0) { + for (int idx : indices) { + std::cout << idx << " "; + } + std::cout << std::endl; + } + return; + } + + for (int i = start; i < n; ++i) { + indices.push_back(i); + Rec(arr, k, i + 1, depth + 1, indices); + indices.pop_back(); + } +} + +void findSubarrays(std::vector& arr, int k) { + std::vector indices; + Rec(arr, k, 0, 0, indices); +} + +int main() { + int n, k; + std::cin >> n; + std::cin >> k; + + std::vector arr(n); + for (int i = 0; i < n; ++i) { + std::cin >> arr[i]; + } + findSubarrays(arr, k); +} diff --git a/iso.cpp b/iso.cpp new file mode 100644 index 00000000..a450dc47 --- /dev/null +++ b/iso.cpp @@ -0,0 +1,66 @@ +#include +#include +#include +#include + + +bool Iso(const std::string& a, const std::string& b) { + // Если длины строк не равны, они не могут быть изоморфными + if (a.length() != b.length()) { + return false; + } + + // Создаем двe хеш-таблицы для отслеживания соответствий символов + std::unordered_map one; //O(n) + std::unordered_map reverseone; + // O(n) + 3 * 1 байт * 2 мапы + + // Итерируемся по каждому символу строк + for (size_t i = 0; i < a.length(); ++i) { + char charA = a[i]; + char charB = b[i]; + // + 1 байт * 2 + + if (one.count(charA)) { + if (one[charA] != charB) { // Проверяем, совпадает ли с charB + return false; + } + } else { + one[charA] = charB; // Устанавливаем новое соответствие так как его еще нет + } + + + if (reverseone.count(charB)) { // Если уже есть соответствие для charB + if (reverseone[charB] != charA) { // Проверяем, совпадает ли оно с charA + return false; + } + } else { + reverseone[charB] = charA; + } + } + + return true; // Если все проверки пройдены, строки изоморфны +} +void runTests() { + // Тесты с обычными значениями + assert(Iso("egg", "add") == true); + assert(Iso("foo", "bar") == false); + // (3 * 1 + 1 (за ноль) + 4 (за длину)) * 2 + + // Пограничные значения + assert(Iso("", "") == true); // Пустые строки + assert(Iso("a", "a") == true); // Одна буква, совпадающая + assert(Iso("a", "b") == true); // Одна буква, разные + + // Проверка на разные длины строк + assert(Iso("abc", "defg") == false); +} + +int main() { + runTests(); + return 0; +} + +// в итоге память это 2 * O(4) + 3 * 1 байт * 2 мапы + 1 байт * 2 + (3 * 1 + 1 (за ноль) + 4 (за длину)) * 2 = 32 байта + + diff --git a/main (4).cpp b/main (4).cpp new file mode 100644 index 00000000..3269874a --- /dev/null +++ b/main (4).cpp @@ -0,0 +1,46 @@ +/****************************************************************************** + + Online C++ Compiler. + Code, Compile, Run and Debug C++ program online. +Write your code in this editor and press "Run" button to compile and execute it. + +*******************************************************************************/ + +#include +#include + +// Подсчет числа связей +std::vector countConnections(const std::vector>& adjacencyMatrix) { + int n = adjacencyMatrix.size(); + std::vector connections(n, 0); + + for (int i = 0; i < n; ++i) { + for (int j = 0; j < n; ++j) { + if (adjacencyMatrix[i][j] == 1) { + connections[i]++; + } + } + } + return connections; +} + +int main() { + int n; + std::cin >> n; // Ввод количества вершин графа + + std::vector> adjacencyMatrix(n, std::vector(n)); + + for (int i = 0; i < n; ++i) { + for (int j = 0; j < n; ++j) { + std::cin >> adjacencyMatrix[i][j]; + } + } // Задание связей между вершинами графа + + std::vector connections = countConnections(adjacencyMatrix); + + for (int i = 0; i < n; ++i) { + std::cout << "Unit " << i << ": " << connections[i] << std::endl; + } // Вывод результата + + return 0; +} diff --git "a/\320\236\321\202\321\207\320\265\321\202_8_\320\273\320\260\320\261_\320\234\320\260\320\273\320\272\320\276\320\262_\320\234\320\260\320\272\321\201\320\270\320\274.docx" "b/\320\236\321\202\321\207\320\265\321\202_8_\320\273\320\260\320\261_\320\234\320\260\320\273\320\272\320\276\320\262_\320\234\320\260\320\272\321\201\320\270\320\274.docx" new file mode 100644 index 00000000..90afaf25 Binary files /dev/null and "b/\320\236\321\202\321\207\320\265\321\202_8_\320\273\320\260\320\261_\320\234\320\260\320\273\320\272\320\276\320\262_\320\234\320\260\320\272\321\201\320\270\320\274.docx" differ