33 / 133
Aug 2016

Dokładnie w tym leżał pies pogrzebany :stuck_out_tongue_winking_eye: Na początku miałem pomysł, by użyć właśnie pierwiastka, ale uznałem, że obliczę "po kratkach", by nie porównywać wartości zmiennoprzecinkowych. To rozwiązanie miałoby sens, gdyby żaden z punktów nie leżał na osi X i Y. Dzięki :wink:

to rozwiązanie miałoby by sens, jedynie w przypadku, gdyby autor inaczej zdefiniował odległość :slight_smile:

sprawdź dla punktów (8, 1) i (5, 6)

Mam tylko nadzieję, że to nie ja - może kiedyś coś na ten temat napisałem?

Używanie pair zamiast odpowiedniej struktury, na pewno powoduje, że program jest dużo mniej czytelny, ale jest co najmniej jeden powód używania pair i zagnieżdzonych
pair<pair<> >.
Dzięki nim [pair ...], możemy użyć sortowania z STL [sort(....begin(), ..,.end())] bez pisania własnej funkcji porównującej.

W dyskutowanym programie jednak to niestety nie występuje.

Miałem na myśli znajomego z tak zwango reala (tak, posiadam takowych... a przynajmniej takowego :wink:)

Ja lubię jeszcze używać pair reprezentując grafy ważone.

Witam! Problem nad którym się głowie już trochę czasu według SPOJ-a przekraczam dozwolony obszar pamięci(SIGSEGV) . Ale kompletnie nie wiem kiedy. Tablice dynamiczne tworze na początku pętli ilości testów do wykonania a na jej końcu uwalniam obszar pamięci. Dla jednego testu program nie sypie się, natomiast na 2 już tak, sortuje, wypisuje prawidłowo ale jak by miał problem z uwalnianiem pamięci i nie rozumiem tego CRASHA. Prosze o pomoc. Oto moj kod http://ideone.com/yAIlHV15.

porównaj wyniki dla takich dwóch testów, może wyciągniesz właściwy wniosek :slight_smile:

pierwszy test

2
2
A 1 1
B 0 0
2
A 1 1
B 0 0

oraz drugi test

3
2
A 1 1
B 0 0
2
A 1 1
B 0 0
1
X 0 0

Zauważyłem , niepotrzebnie alokowałem pamieć gdy ilość punktów była równa 1. Poprawione. Ale SPOJ dalej to samo SIGSEGV, a robiłem różnorodne testy i wychodzą pozytywnie. Jakieś dalsze wskazówki? Poprawiony kod wraz z testem http://ideone.com/yAIlHV25 .

Witaj. Rozumiem, że jesteś początkujący, ale twój kod jest strasznie nieczytelny i nikt nie będzie miał ochoty go "debugować". Zadanie przekombinowałeś. Spróbuj go napisać bez wskaźników(tutaj na pewno leży błąd) używając klasy std::vector z biblioteki standardowej. Jeżeli wiesz co to programowanie obiektowe, spróbuj połączyć koncepcje w klasy.

26 days later
2 months later

dzień dobry. Ja dość nietypowo bo program jakimś cudem przeszedł mi za pierwszym razem a ja nie rozumiem, jakim prawem. Wydawało mi się, że wczytanie łancucha w sposób jaki to zrobiłem nie powinien działać. Kombinowałem z cin.get(), cin.getline () ale kompilator tego nie przepuszczał, albo po podaniu liczby testów przeskakiwał do wyświetlania tabeli i wypłenią ją zerami.
Ogóle wracam do programowania po ponad roku przerwy. Czy ktoś mógłby rzucić okiem, powiedzieć co można jeszcze usprawnić

W takim razie na razie nie myśl o usprawnieniach tylko myśl jakim prawem :wink:

Na razie nie usprawnienia [może kiedyś, jak już będziesz wiedział jakim prawem] ale takie małe uwagi:

  1. W ideone, można i należy wklejać w okienko input [wejście] dane wejściowe - test, a potem sprawdzać poprawność wyników w okienku stadout [wyjście].
  2. gdy: "..gdzie nazwa jest unikalnym dla każdego testu ciągiem co najwyżej 10 liter.." to zwiększaj tablicę przynajmniej o jeden [na'\0'] a nigdy nie zmniejszaj jej pod żadnym pozorem
  3. cin >> t1[j].ch >> t1[j].x >> t1[j].y; jest tu jak najbardziej poprawne i prawidłowe i można to napisać w jednej instrukcji. Dodatkowo, jest [cin] na tyle inteligentne, że wie samo co i jak zrobić, w przeciwieństwie do niektórych programistów [soryy tak mi się jakoś napisało,mam nadieję, że się nie obrazisz :wink:]
  4. zamiast: t1.odl = sqrt(t1.x*t1.x + t1.y*t1.y);
    można: t1.odl = hypot(t1.x, t1.y); <-- zobacz np w wiki co robi hypot(...)
  5. do sortowania, nie konieczna jest znajomość dokładnej odległości - wystarczy np kwadrat tej wartości - wtedy zamiast na double, można liczyć ją na intach i bez liczenia sqrt. [ani hypot]
  6. sortowanie jakie jest każdy widzi [a może sort z STL?]
  7. structura [klasa] + metoda? [liczenie odległości] - ale to może plany jeszcze nie na dzisiaj.

Ok dzięki.
3. Ok. Ale załóżmy, ze nazwa punktu może być dwuelementowa- oddzielona spacją. Wtedy trzeba użyć cin.getline () albo cin.get(). No ale wtedy program nie działa
6. Tu wiem. Nad qsortem muszę jeszcze trochę posiedzieć. Co do funkcji sort z STL, jasne ze mogłem jej użyć ale sortowanie wydaje mi się na tyle fundamentalnym algorytmem, ze chyba lepiej kilka razy napisać go samemu.

18 days later
1 month later