Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
118 changes: 118 additions & 0 deletions 3.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
#include <iostream>
#include <vector>

void fillGaps(std::vector<int>& 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<int> 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<int> 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<int> 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<int> 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<int> 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<int> arr6;
fillGaps(arr6);
std::cout << "Test 6: ";
for (int num : arr6) {
std::cout << num << " ";
}
std::cout << "\n"; // Ожидаемый результат: (пустой массив)

// Тест 7: Массив с одним элементом
std::vector<int> 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;
}
44 changes: 44 additions & 0 deletions C3100-Malkov_Maksim_lab4
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#include <iostream>
#include <vector>


void Rec(std::vector<int>& arr, int k, int start, int depth, std::vector<int>& 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<int>& arr, int k) {
std::vector<int> indices;
Rec(arr, k, 0, 0, indices);
}

int main() {
int n, k;
std::cin >> n;
std::cin >> k;

std::vector<int> arr(n);
for (int i = 0; i < n; ++i) {
std::cin >> arr[i];
}
findSubarrays(arr, k);
}
66 changes: 66 additions & 0 deletions iso.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
#include <iostream>
#include <unordered_map>
#include <string>
#include <cassert>


bool Iso(const std::string& a, const std::string& b) {
// Если длины строк не равны, они не могут быть изоморфными
if (a.length() != b.length()) {
return false;
}

// Создаем двe хеш-таблицы для отслеживания соответствий символов
std::unordered_map<char, char> one; //O(n)
std::unordered_map<char, char> 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 байта


46 changes: 46 additions & 0 deletions main (4).cpp
Original file line number Diff line number Diff line change
@@ -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 <iostream>
#include <vector>

// Подсчет числа связей
std::vector<int> countConnections(const std::vector<std::vector<int>>& adjacencyMatrix) {
int n = adjacencyMatrix.size();
std::vector<int> 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<std::vector<int>> adjacencyMatrix(n, std::vector<int>(n));

for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
std::cin >> adjacencyMatrix[i][j];
}
} // Задание связей между вершинами графа

std::vector<int> connections = countConnections(adjacencyMatrix);

for (int i = 0; i < n; ++i) {
std::cout << "Unit " << i << ": " << connections[i] << std::endl;
} // Вывод результата

return 0;
}
Binary file not shown.