• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zniszczony Soroban - zadanie z konkursu, prośba o pomoc w zrozumieniu pytania

Object Storage Arubacloud
0 głosów
773 wizyt
pytanie zadane 4 sierpnia 2020 w C i C++ przez Shiro Stary wyjadacz (10,300 p.)

Cześć,

Mam problem z pytaniem konkursowym 
Pełna treść:

Leon, wujek Toma, ma warsztat, w którym przerabia różne klamoty, które wpadną mu w ręce. Z pozoru zwykły stolarz, ale niech Cię to nie zwiedzie – jest tam parę rzeczy, które już od dawna mamy na oku i przydałyby się nam na robocie. Jedyny sposób aby spokojnie się tam rozejrzeć, to zatrudnienie się u Leona, który może byłby i chętny, ale jest dość… oldskulowy. Ma Toma za półgłówka i jako warunek przyjęcia go do pracy wyznaczył Tomowi nauczenie się używania starego, samurajskiego liczydła, którego sam Leon używa do sumowania rachunków. Stare samurajskie liczydło nazywa się Soroban. Serio.
br
Liczydło “Soroban” pozwala prowadzić obliczenia w systemie dziesiętnym. Kolejne cyfry w systemie dziesiętnym reprezentowane są przez kolejne kolumny liczydła, zaczynając od prawej. Koraliki powyżej belki reprezentują wartość 5. Każdy koralik poniżej belki reprezentuje wartość 1. Konkretną cyfrę reprezentuje się dosuwając koraliki do belki na środku. Przykład: 7 pokazuje się dosuwając koralik powyżej belki (5) oraz dwa koraliki poniżej belki (1+1).
br
Podczas nauki Tom znalazł uszkodzone liczydło. Co prawda wszystkie koraliki powyżej górnej belki są na miejscu, jednak koraliki które powinny być poniżej belki wypadły, a co gorsza, część z nich się zgubiła. Tom postanowił, że naprawi liczydło tak, żeby miało jak największe możliwości. Czyli postanowił powkładać dolne koraliki do liczydła w taki sposób, żeby możliwe było reprezentowanie tak wielu liczb jak się da.
br
Oczywiście sam sobie z tym nie poradzi, więc pomóż mu to zrobić, zanim Leon straci cierpliwość!

Wejście

Każdy zestaw danych zawiera dwie dodatnie liczby naturalne r oraz s podane w jednym wierszu i rozdzielone spacją:
1 <= r <= 8 – liczba kolumn liczydła,
0 <= s <= 4r – liczba koralików, które Johnny znalazł i chce umieścić poniżej dolnej belki liczydła.

Wyjście

Wypisz jedną wartość – największą liczbę poprawnych liczb, jaki można reprezentować na zepsutym Sorobanie po naprawach.

Udało mi się zrobić działający program, który liczy ewentualnie wypisuje pasujące liczby, ale moje wyniki nie pasują do przykładów

2, 1 -> 8 //tutaj mi wychodzi dobry wynik (1, 6, 10, 15, 51, 56, 60, 65)
2, 3 -> 24 //tutaj mój wynik to 16 (3, 8, 12, 17, 21, 26, 30, 35, 53, 58, 62, 67, 71, 76, 80, 85)

Problem jest taki że dla 2, 3 sprawdziłem każdą liczbę z osobna i zgadzam się algorytmem, a nie sądzę aby błąd był w zadaniu konkursowym (tym bardziej że znalazłem takie samo zadanie w jakimś innym konkursie tylko po angielsku) 

Ja wyście rozumiem jako liczba takich liczb które możemy zbudować w taki sposób aby nie zostały nam żadne koraliki. Czy to oto wg Was może im chodzić? 

Już trochę nie mam pomysłu co może być nie tak.. 

 

Z góry dziękuje za każdy pomysł :)

komentarz 12 sierpnia 2020 przez Nicolaus Dyskutant (9,740 p.)
A czemu w przypadku liczb wejściowych 2 1 wynik nie wynosi 11? (1, 5, 6, 10, 15, 50, 51, 55, 56, 60, 65) Czy w tym zadaniu poprawne liczby to są te, do których są użyte znalezione koraliki?
komentarz 17 sierpnia 2020 przez Shiro Stary wyjadacz (10,300 p.)
Oczywiście pewności nie mam lecz wg mojego zrozumienia:
Liczymy ilość takich liczb która jest możliwa do przedstawienia za pomocą posiadanych koralików w taki sposób aby wszystkie nasze koraliki były użyte

Jeśli moje zrozumienie polecenia jest poprawne to liczby 5, 10, 50, 55 nie pasują do rozwiązania

 

Pozdrawiam!

1 odpowiedź

+1 głos
odpowiedź 4 sierpnia 2020 przez Whistleroosh Maniak (56,980 p.)
wybrane 5 sierpnia 2020 przez Shiro
 
Najlepsza
W zadaniu chodzi o to że masz powstawiać koraliki w liczydło w taki sposób żeby ilość różnych liczb które możemy otrzymać na naprawionym liczydle była jak największa. Tutaj trzeba zauważyć że te koraliki można wstawić w liczydło na wiele sposobów, z czego różne sposoby mogą dawać różna liczbe możliwych do otrzymania liczb. Np. dla danych wejściowych 2 3 koraliki możemy ustawić w następujące sposoby:

1) 0 3 (3 w pierwszej kolumnie, 0 w drugiej)

2) 3 0

3) 1 2

4) 2 1

Można jeszcze wyróżnić takie ustawienia jak 0 0, 1 1, 0 1, 1 0, 2 0, 0 2, ale one na pewno są nieoptymalne gdyż nie wykorzystują wszystkich koralików.

Teraz załóżmy że do jednej kolumny włożyliśmy x koralików. Wtedy sama ta kolumna pozwala uzyskać 2*(x+1) liczb. Dlaczego? Bo koralik odpowiedzialny za 5 możemy ustawić na 2 pozycjach a resztę koralików na x+1 różnych pozycjach.

Teraz powiedzmy że x_i to ilosc mozliwych ustawień w kolumnie i, którą liczymy wzorem podanym wyżej. Teraz jeżeli liczydło ma n kolumn to ilość wszystkich możliwych liczb które możemy otrzymać to x_1*x_2*...*x_n.

Dla danych wejściowych 2 3 z którymi miałeś problem wynikiem jest 24 dla ustawienia 1 2.

Jest tak dlatego iż x_1 = 2*(2+1) = 6, x_2 = 2*(1+1) = 4. Czyli x_1*x_2 = 6*4 = 24
komentarz 5 sierpnia 2020 przez Shiro Stary wyjadacz (10,300 p.)
edycja 5 sierpnia 2020 przez Shiro

Dla danych wejściowych 2 3 z którymi miałeś problem wynikiem jest 24 dla ustawienia 1 2.

Skąd wziąłeś ustawienie 1 2? Dlaczego nie np. 3 0? Tzn. skąd mam wiedzieć jakie wziąć?

Wtedy sama ta kolumna pozwala uzyskać 2*(x+1) liczb

Czy dla 4 liczb nie trzeba zmodyfikować wzoru? Tzn. czy dla 4 liczb nie jest tak ze jest tylko jedna możliwość? Nie rozróżniamy tutaj kolejności chyba że się myle

 

Z góry dziękuje ;) 

 

1
komentarz 5 sierpnia 2020 przez Whistleroosh Maniak (56,980 p.)
Dla danych wejściowych 2 3 poprawnym ustawieniem jest 1 2 lub 2 1. Wiem to stąd, że przetestowałem wszystkie ustawienia i wziąłem te które daje największy wynik.
komentarz 5 sierpnia 2020 przez Whistleroosh Maniak (56,980 p.)

Czy dla 4 liczb nie trzeba zmodyfikować wzoru?

Co masz na myśli przez 4 liczby? 4 koraliki czy 4 możliwe ustawienia dla danej kolumny?

komentarz 5 sierpnia 2020 przez Shiro Stary wyjadacz (10,300 p.)
Wzór na ilość mozliwosci w kolumnie to 2(x+1) dla x - il. koralikow

Czy gdyby koralikow bylo 4 to tez bylby taki wzor? czy moze 2x po prostu ?
komentarz 5 sierpnia 2020 przez Shiro Stary wyjadacz (10,300 p.)
Teraz jeszcze sie zastanawiam jak sprytnie wypisac wszystkie mozliwosci ..
komentarz 5 sierpnia 2020 przez Whistleroosh Maniak (56,980 p.)
Dla 4 koralików będzie ten sam wzór, bo ta jedynka we wzorze odpowiada koralikowi o wartości 5. Czyli dla 4 masz 2*(4+1) co odpowiada cyfrom: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

A wszystkie możliwości możesz wypisać prostym algorytmem rekurencyjnym ;)
komentarz 5 sierpnia 2020 przez Shiro Stary wyjadacz (10,300 p.)
Rozumiem,

Początkowo źle zrozumiałem. Dziękuje za to obszerne wyjaśnienie "_"

Podobne pytania

0 głosów
2 odpowiedzi 791 wizyt
pytanie zadane 30 lipca 2016 w C i C++ przez Julenissen Początkujący (270 p.)
0 głosów
1 odpowiedź 211 wizyt
pytanie zadane 27 października 2020 w C i C++ przez Akki Nowicjusz (170 p.)

92,624 zapytań

141,482 odpowiedzi

319,824 komentarzy

62,006 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...