From 5e8cdd98fb7b1b8fd8defaa745cef3c0fffa354b Mon Sep 17 00:00:00 2001 From: witek-formanski Date: Mon, 15 Jan 2024 13:32:57 +0100 Subject: [PATCH] =?UTF-8?q?programowanie=20zach=C5=82anne?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/cw12/zad10/twitter.cpp | 11 ++++++ src/cw12/zad13/havel_hakimi.cpp | 0 src/cw12/zad5/rotate_parentheses.cpp | 53 ++++++++++++++++++++++++++++ src/cw12/zad8/shortest_sequence.cpp | 8 +++++ src/cw12/zad9/mars.cpp | 17 +++++++++ 5 files changed, 89 insertions(+) create mode 100644 src/cw12/zad10/twitter.cpp create mode 100644 src/cw12/zad13/havel_hakimi.cpp create mode 100644 src/cw12/zad5/rotate_parentheses.cpp create mode 100644 src/cw12/zad8/shortest_sequence.cpp create mode 100644 src/cw12/zad9/mars.cpp diff --git a/src/cw12/zad10/twitter.cpp b/src/cw12/zad10/twitter.cpp new file mode 100644 index 0000000..7c0363a --- /dev/null +++ b/src/cw12/zad10/twitter.cpp @@ -0,0 +1,11 @@ +/* +pary (d, k) +posortować po k/d +n*log(n) +*/ + +#include + +std::vector twitter(std::vector> elon_musks_debts) { + +} \ No newline at end of file diff --git a/src/cw12/zad13/havel_hakimi.cpp b/src/cw12/zad13/havel_hakimi.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/cw12/zad5/rotate_parentheses.cpp b/src/cw12/zad5/rotate_parentheses.cpp new file mode 100644 index 0000000..5a94450 --- /dev/null +++ b/src/cw12/zad5/rotate_parentheses.cpp @@ -0,0 +1,53 @@ +/* +nieparzysta liczba nawiasów => -1 (nie da się) +parzysta liczba nawisów: +suma prefiksowa (+1 za "(", -1 za ")") +docelowo nigdy nie możemy zejść poniżej 0 + +l to ostatnia wartość w tablicy prefiksowej +k to maksymalna "głębokość" poniżej osi (-k to min z tablicy prefiksowej) +musimy wykonać sufit z k/2 obróceń od lewej (")" -> "("), żeby nic nie było pod osią +potem musimy wykonać (l + 2suf(k/2))/2 = l/2 + suf(k/2) kroków, żeby ostatnia wartość wynosiła 0 +czyli ostatecznie odpowiedź to l/2 + 2sufit(k/2) +jeżeli k jest ujemne (-k dodatnie), to pomijamy (czyli odp to l/2) +*/ + +/* +parentheses: +( -> 1 +) -> -1 +*/ + +/* + T(n) = O(n) + M(n) = O(n) (można O(1)) +*/ + +#include + +int* get_prefix_tab(int parentheses[], int size) { + int* prefix_tab = new int[size]; + prefix_tab[0] = parentheses[0]; + for (int i = 1; i < size; i++) + prefix_tab[i] = prefix_tab[i - 1] + parentheses[i]; + + return prefix_tab; +} + +int get_minimum(int prefix_tab[], int size) { + int minimum = 0; + for (int i = 0; i < size; i++) + minimum = std::min(minimum, prefix_tab[i]); +} + +int rotate_parentheses(int parentheses[], int size) { + if (size % 2) + return -1; + + int* prefix_tab = get_prefix_tab(parentheses, size); + int minus_k = get_minimum(prefix_tab, size); + int l = prefix_tab[size - 1]; + delete[] prefix_tab; + + return l/2 + 2 * ((-minus_k+1) / 2); +} \ No newline at end of file diff --git a/src/cw12/zad8/shortest_sequence.cpp b/src/cw12/zad8/shortest_sequence.cpp new file mode 100644 index 0000000..1e406de --- /dev/null +++ b/src/cw12/zad8/shortest_sequence.cpp @@ -0,0 +1,8 @@ +/* +system Zeckendorfa +(każda liczba ma dokładnie jedną reprezentację +w niesąsiadujących ze sobą liczbach Fibonacciego) + +algorytm: w każdym kroku bierzemy największy możliwy wyraz ciągu Fib +i redukujemy do kolejnego identycznego podproblemu +*/ \ No newline at end of file diff --git a/src/cw12/zad9/mars.cpp b/src/cw12/zad9/mars.cpp new file mode 100644 index 0000000..9d0a358 --- /dev/null +++ b/src/cw12/zad9/mars.cpp @@ -0,0 +1,17 @@ +/* +analogicznie do nawiasów +odpowiedź to zbiór maksymalnych głębokości sufiksowych +*/ + +#include + +std::vector get_union(std::vector possible_stations_left, std::vector possible_stations_right) {} + +std::vector get_possible_initial_stations(int distance[], int fuel[], int size, bool direction) {} + +std::vector get_possible_initial_stations(int distance[], int fuel[], int size) { + return get_union( + get_possible_initial_stations(distance, fuel, size, true), + get_possible_initial_stations(distance, fuel, size, false) + ); +} \ No newline at end of file