Skip to content
Merged
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
14 changes: 7 additions & 7 deletions contests/_37-PDP/b-shroompath-solution.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ $$A = \lceil S/X \rceil, B = \lceil S/Y \rceil$$.
πρώτος συνδυασμός συμβολοσειρών μήκους $$S$$ αποτελείται από $$S$$ **α** και ο τελευταίος από $$S$$ **β**.
Μάλιστα αν τα $$X$$ και $$Y$$ είναι μεγαλύτερα από $$1$$, θα καταφέρουμε να συγκεντρώσουμε
βάρος $$S$$ ακόμα πιο γρήγορα.
Ακολουθούν δύο τρόποι για να υπολογίσουμε όλους τους συνδυασμούς, με αναδρομή και με βρόγχο.
Ακολουθούν δύο τρόποι για να υπολογίσουμε όλους τους συνδυασμούς, με αναδρομή και με επαναληπτικό βρόχο.

**Αναδρομικά:** Βρίσκουμε όλους τους συνδυασμούς για κάθε μήκος συμβολοσειράς και τους προσθέσουμε σε έναν πίνακα
χαρακτήρων ``Z``.
Expand All @@ -50,17 +50,17 @@ $$A = \lceil S/X \rceil, B = \lceil S/Y \rceil$$.
$$2$$ τιμές). Τα **α** και **β** μπορούν να θεωρηθούν ως οι αριθμοί $$0$$ και $$1$$ του δυαδικού συστήματος και η
παραγόμενη συμβολοσειρά να είναι η αλληλουχία όλων των μη μηδενικών φυσικών αριθμών απεικονισμένων στο δυαδικό σύστημα.

**Με βρόγχο:** Χρησιμοποιώντας την *παρατήρηση 2*, μπορούμε να κατασκευάσουμε τις συμβολοσειρές με ένα βρόγχο ως εξής:
**Με επαναληπτικό βρόχο:** Χρησιμοποιώντας την *παρατήρηση 2*, μπορούμε να κατασκευάσουμε τις συμβολοσειρές με έναν επαναληπτικό βρόχο ως εξής:

{% include code.md solution_name='shroom_brute2.cc' start=10 end=14 %}

Μπορείτε να βρείτε ολόκληρο τον κώδικα [εδώ]({% include link_to_source.md solution_name='shroom_brute2.cc' %}).
Η λύση με αναδρομή ή βρόγχο, χρειάζεται $$\mathcal{O}(S\cdot 2^S)$$ χρόνο.
Η λύση με αναδρομή ή επαναληπτικό βρόχο, χρειάζεται $$\mathcal{O}(S\cdot 2^S)$$ χρόνο.

## Υποπρόβλημα 2 ($$ Χ\gt Y $$)

Εφόσον οι χαρακτήρες τύπου **α** έχουν μεγαλύτερο βάρος, θα προλάβουμε να συγκεντρώσουμε το συνολικό βάρος $$S$$ με αυτά.
Τα μανιτάρια **β** δεν θα μας χρησιμεύσουν.
Οι χαρακτήρες **β** δεν θα μας χρησιμεύσουν.

**Παρατήρηση 3:** Για οποιοδήποτε μήκος $$w$$ συμβολοσειρών με $$w\gt 1$$, η πρώτη συμβολοσειρά αποτελείται από $$w$$ **α** και
η επόμενη από $$w-1$$ **α** και ένα **β**. Σε καμία άλλη θέση δεν έχουμε τόσα **α** συγκεντρωμένα.
Expand Down Expand Up @@ -109,8 +109,8 @@ $$2$$ τιμές). Τα **α** και **β** μπορούν να θεωρηθο
{% include code.md solution_name='shroom_solution1.cc' start=7 end=17 %}
Ολόκληρος ο κώδικας [εδώ]({% include link_to_source.md solution_name='shroom_solution1.cc' %}).

Αν όμως αξιοποιήσουμε την πληροφορία ότι τα $$B$$ μανιτάρια τύπου **β** τα συναντάμε στις συμβολοσειρές μήκους $$B$$, είναι
φανερό ότι μέχρι και $$2\cdot B-1$$ μανιτάρια τύπου **α** τα βρίσκουμε νωρίτερα από τα $$B$$ **β**.
Αν όμως αξιοποιήσουμε την πληροφορία ότι τους $$B$$ χαρακτήρες **β** τους συναντάμε στις συμβολοσειρές μήκους $$B$$, είναι
φανερό ότι μέχρι και $$2\cdot B-1$$ χαρακτήρες **α**, τους βρίσκουμε νωρίτερα από τους $$B$$ **β**.

<center>
<img alt="Όλοι οι συνδυασμοί" src="/assets/37-b-shroompath-full.svg" width="480px">
Expand All @@ -126,7 +126,7 @@ $$2$$ τιμές). Τα **α** και **β** μπορούν να θεωρηθο

Ο αριθμός των χαρακτήρων από όλους τους συνδυασμούς ενός μόνο πλάτους $$k$$,
δίνεται από τη συνάρτηση
$$f(k) = 2^k \cdot k$$. Ο υπολογισμός του συνόλου των μανιταριών μέχρι και το πλάτος $$k$$, δίνεται από
$$f(k) = 2^k \cdot k$$. Ο υπολογισμός του συνόλου των χαρακτήρων μέχρι και το πλάτος $$k$$, δίνεται από
τη συνάρτηση $$p(k) = f(1)+f(2)+\dots+f(k)=\sum_{i=1}^{k}f(i) = \sum_{i=1}^{k} {i\cdot 2^i}$$.<br>
Η συνάρτηση αυτή μπορεί να υπολογισθεί με
$$p(k) = 2^{k+1}\cdot (k-1)+2$$
Expand Down