17 / 33
May 2018

Zadanie może jest banalne ale ja nie mogę przebrnąć ostatniego testu więc szukam przyczyny dlaczego tak jest.
Czytając zadanie niestety nie jest ono tak oczywiste, np nie wiem czy przypadek kiedy dwa wieżowce będą w tej samej odległości ma znaczenie i należy go pokazać czy też nie.
Dla zadanego wejścia mam poprawny wynik i co z tego?

Rozumiem to pytanie w takim samym stopniu co @mariusz193, ale w moim kodzie (AC) nie ma żadnych wartości bezwzględnych (absów). Ale to jeszcze o niczym nie świadczy.

Skąd wiesz, że ostatniego? Do tego zadania nie ma wglądu w wyniki programu dla każdego testu.

To raczej nie jest wyzwanie - std::cout << “0 1 3” << std::endl w C++ robi swoje :wink: Słowem to nie ma znaczenia.

To jest tylko moje podejrzenie, wywala się na 5.
Nigdy nie widziałem aby pojawiała się 6.
Rozumiem, że 0 1 3 nie jest wyzwaniem ale tylko to mam jako wynik pozytywny. Więc poprawność opieram na tym.
Na swoje potrzeby rozrysowałem sobie kilka innych skrajnych przypadków i wg mnie wyniki są w moim rozumieniu poprawne.
Nic innego nie przychodzi mi do głowy

Tak przy okazji… czytam treść zadania i czytam i chyba ślepy jestem. Ktoś może mi wytłumaczyć wyjście do przykładu?

IN 
0 0 2
10
0 1
0 1
0 1
2 1
2 1 
2 1
2 1
1 1
1 1
1 1

OUT
0 1 3

Przecież (2 1) pojawiło się 4 razy zaś (0 1) tylko 3

Edit: aha, już ogarniam, wieżowiec 2 1 nie jest w mieście

A może po prostu jest 5 testów do zadania? :slight_smile:

Błąd. Opieranie się na przykładowym wejściu jest na ogół złe. Cytat z https://warsztatywww.wdfiles.com/local--files/drogowskaz-pasjonata%3Aolimpiady/Przygotowanie-do-OI.pdf7

Możesz źle rozumieć lub źle implementować :slight_smile: Jeżeli chcesz to wstaw kod. Jeżeli (jeszcze) nie chcesz - możesz przedstawić swój algorytm słownie lub jako listę kroków.

IN
0 0 2
Dwie pierwsze cyfry określają środek układu do którego się odnoszę a promień określa granicę w jakiej się poruszam.
wczytując poszczególne punkty wyliczam promień od środka jako przekątną trójkąta i zliczam ich wystąpienia. Jeżeli podczas kolejnego wczytywania nie pojawi się mniejszy promień to wynik daję na konsolę, w przeciwnym wypadku zliczam ponownie wystąpienia itd.
Nie bawię się w żadne tablice. Oczywiście na wejściu zamiast 0 0 może być 3 3.

Pierwszy błąd, jeżeli faktycznie liczysz przekątną tzn. liczysz pierwiastek i wprowadzasz błąd obliczeń zmiennoprzecinkowych zamiast operować na sumie kwadratów. Drugi, jeżeli trzymasz to w float.

Pierwszy błąd, jeżeli nie liczysz pierwiastka, ale za to używasz niewłaściwego typu danych (chyba najbezpieczniej od razu robić wszystko na long long int).

Ta część brzmi podejrzanie. Załóżmy in 0 0 10. Wczytujesz współrzędne, np. 5 i 5. Potem kolejne - 10 i 10. W kolejnym (drugim, tj. 10 i 10) wczytaniu nie pojawił się mniejszy promień więc wynik dajesz na konsolę pomimo faktu, że potem masz np. 3 i 3 kilka razy? Poza tym jak zliczasz ponownie wystąpienia, jeżeli nigdzie ich nie zapamiętujesz (np. w tablicy)?

STANDARTOWA RADA:

  1. Przeczytaj dokładnie treść zadania.
  2. Zastanów się jak to zrobić.
  3. Gdy nie wiesz lub gdy wydaje Ci się, że wiesz a jednak nadal WA go to 1.
  4. Gdy przypadkowo dostaniesz AC, pomyś, jak poprawić kod [refaktoring] a więc warto [trzeba] go to 1.

No i czy kto[ś] [np autor zadania] mówił coś, że lista jest w jakikolwiek sposób posortowana? Więc bezpieczniej zqałożyć, że jednak nie. Jak umiesz z takiego typu problemami rozprawiać się bez tablic czy ekwiwalentu - vektora[ów] to gratuluję umiejętności.

Dziękuję za trochę konkretów.
Do zadanka podejdę jeszcze raz.
Faktycznie mogę robić błąd w sposobie liczenia promienia i może to mieć znaczenie.
Dodam, że pamiętając moje poprzednie potyczki ze spoja, nie zadowoliłem się jedynie danymi testowymi ale rozrysowałem sobie kilkanaście skrajnych przypadków i wynik był taki jakiego się spodziewałem.

Uwaga co do sortowania również jest cenna. Oczywiście czytając zadanie zastanawiałem się nad tym czy może wystąpić przypadek typu:
IN 0 0 2
10
0 1
2 1
0 1
2 1
0 1
itd.
Czytając wielokrotnie treść zadania założyłem, że nie.

Bezpieczniej założyć mniej korzystny wariant. W przeciwnym wypadku, musisz szukać błędu dodatkowo w założeniach. A przecież to nie złośliwość autora, jak mógłbyś sądzić. Po prostu dane do zadań są najczęściej generowane automatycznie - pseudolosowo. W tym zadaniu zapewne tak samo - nie wiem, ale zrobiłem takie [bezpieczne] założenie.

Ale możliwe, że dla swojego błędnego założenia i dlatego poprawne wyniki.

Dodatkowo, czytając opis twojego rozwiązania, mam wątpliwości, czy masz poprawny kod nawet gdyby dane były posortowane - zawsze można je wczytać i posortować wstępnie.
Może ja nie rozumiem opisu, lub tTy opisujesz niejasno swoje rozwiązanie?

Z tego co powyżej mam co najmniej dwie wątpliwości do przeanalizowania.
Dziękuję za dyskusję

1 month later

Witam ponownie
Chciałbym odświeżyć temat.
Powyżej moja dyskusja na temat wykonania zadania - jak w temacie.
Po wielu próbach nadal nie mogę wpaść co robię nie tak

W uzupełnieniu, nadal nie chcę pokazywać kodu,natomiast zależy mi na danych do testowania. Autor zapewne wie o przypadkach, które intuicyjnie nie przychodzą na myśl
Dodam, że zamieniłem pierwiastek na sumę kwadratów, mieszam dane wejściowe, na testach w ideon jest ok natomiast spoj wywala błąd

więc może prześlij ten kod prywatnie komuś, kto udziela odpowiedzi na forum - tu są programiści (niektórzy lepsi niż średnia) ale nie ma wróżek :slight_smile:

Dzięki za odzew. Wszystko już wiem.
Przez przypadek wpisałem z palca pewne dane wejściowe i otrzymałem nieoczekiwany wynik.
Który był inny niż się spodziewałem. Wiem w czym problem. Dzięki za odzew

Był już na tym forum pewien Pan, który w imię swojej wizji samoedukacji wklejał nic nie wnoszące do tematu kody, których działania nie umiał wytłumaczyć, nie był w stanie opisać błędów w swojej implementacji, nie był w stanie się z nikim porozumieć i oczekiwał pomocy wróżek, które naprawią błąd w kodzie “bo najpierw wyświetla się to a lepiej żeby tamto chociaż w sumie to”.

Nie chciałbym Cię w żaden sposób deprymować ani tym bardziej porównywać do tamtego Pana, którego po udowodnieniu mu, iż źle robi, nieco “poniosło”. Nie chcę tego robić tym bardziej, że przecież znalazłeś błąd w kodzie i walczysz z konkretnym problemem (zadaniem) a nie wiatrakami własnego autorstwa, co oczywiście jest mocno na plus.

Walczysz jednak z tym zadaniem od dawna. Może lepiej zrobić inne a potem wrócić do tego? A może lepiej faktycznie jak radzi @mariusz193 pokazać kod? Jeżeli da się go przeczytać, ale jego estetyka dorównuje poprawności to przecież nic złego. Prawdopodobnie ktoś powie Ci co konkretnie możesz poprawić, zasugeruje metodę testowania, pokaże swój kod dający AC (to raczej na PW, ale jest taka możliwość), podeśle tematy dotyczące formatowania kodu, …

Jeżeli uważasz, że samemu dasz radę to oczywiście ok, ale na prawdę ludzie na forum są (powinni być? :wink: ) chętni do pomocy. Może dzięki podpowiedzi, a w ostateczności nawet gotowcowi najdzie Cię olśnienie, które pomoże nie tylko w tym, ale też w innych zadaniach? A może rozwiążesz to zadanie samemu swoim być może przekombinowanym sposobem i w efekcie na innym trudniejszym zadaniu się wyłożysz? A może przesadzam i poradzisz sobie lepiej i szybciej bez forum? Oczywiście tylko Ty - znając swoje możliwości - możesz wiedzieć, co jest najbardziej prawdopodobne :wink:

Mam takie pytanie odnośnie tego zadania: czy punkt znajdujący się na jego brzegu jest w nim? Na przykład czy punkt (0,1) mieści się w mieście 0 0 1 ? :slight_smile:

Tak

Ok. Tak też założyłem. W takim razie proszę o pomoc gdyż nie potrafię wymyślić żadnego testu którego nie przechodzę.

Linia 50 znak 210 :wink:

Zrobiłem dokładnie ten sam błąd.

PS. Liczba ujemna podniesiona do kwadratu daje dodatnią :wink: