21 / 33
May 2018

Na początku pragnę zaznaczyć, że zadanie już rozwiązałem, udało mi się zająć na chwilę obecną 5 miejsce. Więc, żadnego kodu nie będzie. Będzie za to troszeczkę jęczenia.

Wyjaśnimy jednak jeszcze jedną rzecz, żeby uniknąć niepotrzebnej dyskusji. Uzyskałem po drobnej popraweczce czas 0.30 który jednak system spoj zignorował więc w istocie zajmuję 6 miejsce zaś należny mi tytuł 5 miejsca okupuje Piotr Dobosiewicz. Wspominam o tym bo taka sytuacja ma miejsce nie po raz pierwszy już i koniec końców w k_o_ń_c_u zwróciłem na to uwagę.

Wracając do zadania. Zadanie z początku wydawało się bardzo proste i w istocie było, jednak jest w nim pare kruczków. Pomijam te które wyjaśnia treść zadanie ale no no..

W zadaniu nie ma mowy o tym jak się zachować w przypadku gdy istnieją dwa takie same budynki w takiej samej odległości. co wynikające z treści zadania oczywiście jest możliwe. Jest to duże niedopatrzenie ze strony autora. Po wyniku AC zdaje się, że takie rozwiązania nie istnieją albo miałem szczęście trafić w klucz.

Pozdrawiam.

Mylisz się, przed chwilą sprawdzałem, na zaszczytnym piątym miejscu jest Chrystus Król, pewnie jakiś uzurpator?

Faktycznie zmieniło się. Jak zalicza to wskasuje odrazu a jak się poprawia to trzeba czekać ???

No nic zapamiętam na przyszłość.

Tak, miałem to już wielokrotnie, teraz w tym wypadku [tym zadaniu], natychmiast zajrzałem do swojego kodu i zobaczyłem [pomyślałem] że mam tam jeszcze sporo miejsca na optymalizacje. Wysłałem, z trochę lepszym czasem [nie martw się, na razie jeszcze nie od twojego, ale kto wie ...] ale na liście jeszcze nie widać zmiany.

Podczas układania zadania miałem na uwadze przypadek w którym mogą znajdować się dwa wieżowce równo oddalone od centrum, ponieważ w takiej sytuacji trudno stwierdzić na jaki wieżowiec Jasio ma się wspiąć postanowiłem zrezygnować z tego typu testów i nie umieściłem takiego przypadku w testach.

Jak uda Ci się zaliczyć za pierwszym razem, to też czasami musisz trochę poczekać, aby zaliczenie pojawiło się na liście najlepszych rozwiązań. Odświeżanie listy [tak sądzę] odbywa się co jakiś czas [np co 10 - 15 minut]. Jeżeli będziesz miał szczęście i wyślesz swoje zadanie do oceny tuż przed odświeżeniem, twoje ewentualne zaliczenie AC, może pojawić się od razy lub bardzo szybko. Jezeli wyślesz chwilę później, będziesz musiał trochę poczekać.
Ten czas może być oczywiście dłuższy, a może dodatkowo zaleźy np od obciążenia servera? Gdy nie miał mocy lub był bardzo zajęty [server], jedno-dwa odświeżania wypadają z koleiki. Oczywiście nie jestem adminem i nie znam szczegółów, to tylko mój domysł.

PS
Możesz na listę najlepszych do tego zadania zerknąć teraz :wink:

1 year later

Witam
Od jakiegoś czasu próbuję zaliczyć zadanie smwp_101 wieżowce i napotykam na problem. Mianowicie, na SPOJU mam błędną odpowiedź. Ponieważ nie mam pomysłu jaki szczególny przypadek należy brać pod uwagę bardzo proszę o jakąś podpowiedź

w testach do tego zadania nie ma przypadków szczególnych (co było napisane wyżej)
a na forum są raczej programiści niż wróżki :slight_smile: - więc bez kodu masz małe szanse na poradę

Dzieki za odpowiedź
Po wpisaniu danych wynik wychodzi jak trzeba ale mam już doświadczenie ze spoja, że albo czegoś nie uwzględniłem albo jest jakiś inny myk. Czasami można było gdzieś poszukać. W przypadku tego zadania jest dziwnie mało dodatkowych informacji.
To inaczej, czy współrzędne w wartości bezwzględnej mają w tym wypadku jakieś znaczenie?

po co dodatkowe informacje/dane do tak prostego zadania

tego pytania nie rozumiem - ale skoro je zadajesz, to prawdopodobnie masz z tym jakiś problem :slight_smile:

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:

Co do tego, że daje dodatnią to fakt, absy do wywalena :wink:
Natomiast linia 50 znak 210 to… minus z różnicy dwóch punktów którą to liczę by ogarnąć odległość. Co z nim jest nie tak?

EDIT: Oj nieważne. Znak dalej niż ten minus. Patrzę i nie widzę. Dzięki! :slight_smile:

4 years later

Jak ktoś koduje w Pythonie, to informuję że w PyPy3 można wyrobić się w czasie.