Z treści zadania:
"Zestawy składają się z liczby całkowitej, po której następuje spacja i ciąg liczb całkowitych rozdzielonych spacjami."
Czy możliwe jest by po pierwszej liczbie całkowitej wystąpił ciąg liczb, ktory nie zawiera zadnej liczby?
czyli:
in:
3 (pusto)
out:
-
Jeżeli odpowiedź na to pytanie jest przecząca to poproszę Was o sugestie (testy bądź krytykę ) dotyczące kodu:
kod usuniety
Dzięki z góry za pomoc.
Zadanko nie chce mi uparcie przejść do AC, a dyskusja i podpowiedzi w tym wątku powyżej nie pomogły mi rozwiązać problemu.
https://ideone.com/nG262936
Wczytuje GETLINEm wszystko do STRINGA a potem szukam spacji i minusow i tworzę z tego tablice liczb.
Zadanie jest w kategorii łatwe wiec nie podejrzewam żeby sędzia sprawdzał liczby nie mieszczące się w LONG LONG, ale nie mam pomysłu co jeszcze innego może być źle.
Zapominałem dopisać że w pierwszej wersji nie wiedziałem jeszcze jak program ma się zatrzymać i robiłem to ręcznie - po wpisaniu linii danych wciskałem CTRL+Z i jeszcze Enter.
Wtedy pierwsza wersja pokaże poprawny wynik. Zapomniałem o tym napisać
Jak pisałem tę pierwszą wersję jeszcze nie wiedziałem jak wprowadzić nieznaną ilość razy, nieznaną ilość danych, bo się uczę dopiero programować.
Potem podpatrzyłem jeden z linków w tej dyskusji i zrobiłem jak w nim, czyli wczytanie z Getline i rzutowanie na long long i dzięki temu w drugiej wersji jest już OK możesz wprowadzać dane i od razu po Enterze jest wynik, mam prośbę więc o zerknięcie i wychwycenie błędu w drugiej wersji.
Pierwsza wersję dla porządku usuwam.
Jeśli to było dla Ciebie widoczne od razu to gratuluję wprawy, ja musiałem się chwilę pozastanawiać że chodzi o liczenie ujemnych z pozycji minusów.
Nawet mogę napisać że wiem czemu tu popełniłem błąd. Uparłem się żeby skończyć zadanko za jednym posiedzeniem późno wieczorem jak już byłem zmęczony i na sam koniec się zorientowałem że zapomniałem zrobić algorytmu do liczenia ujemnych i na szybko go dopisałem, ale program nie zadziałał nadal.
Następnego dnia już zapomniałem że te minusy pisałem na szybko i nie sprawdzałem już dokładnie ich liczenia i kłopoty gotowe. Przestroga żeby nie programować na siłę jak się jest już zmęczonym.
Dzięki za pomoc.
bo (nawet dobre) uwzględnienie liczb ujemnych nie mogło mieć znaczenia - w danych testowych tego zadania nie ma ani jednego minusa
zaś złe dodało dodatkowy błąd
zaś generalnie musisz popracować nad optymalizacją kodu - znaczna część kodu w tym zadaniu jest niepotrzebna a większość tego co by zostało można znacznie poprawić
Mam taki kod z użyciem <set>
Z tego co widzę dane do set mam wpisane poprawnie. Chciałbym iterować wstecz aż do wymaganej pozycjii. Jednak wychodzą mi głupoty.
Podpowie ktoś poprawnie iterować?
Thx
Na pierwszy rzut oka iterowanie masz w porządku. Według mnie błąd masz w samej logice. Być może źle interpretujesz treść zadania, bo jest trochę pogmatwana (chociaż przykładowe testy powinny rozwiać wszelkie wątpliwości). Ewentualnie (aczkolwiek w to raczej wątpię) nie wiesz do końca jak działa set.
Kod powinien wyglądać jakoś tak:
if (ciag.size() < pozycja) {
cout << '-' << '\n';
} else if (ciag.size() == pozycja) {
cout << *ciag.cbegin() << '\n';
} else {
set<int>::iterator it = ciag.cend(); // auto it = ciag.cend();
while (pozycja--) it--;
cout << *it << '\n';
}
Prawdopodobnie masz jeszcze coś nie tak z wczytywaniem danych. Jest trochę udziwnione, więc nie chciało mi się go sprawdzać. Wkleiłem wczytywanie z mojego kodu i przeszło. Użyj std::getline i std::istringstream (do rozdzielenia łańcucha na liczby). Dodatkowo w tym przypadku lepiej nadałby się std::vector zamiast std::set.
Dzięki twojej korekcie przynajmniej dla przykładu testowgo mam dobre wyniki. THX. Niestety dalej WA.
Założenie miałem takie żeby mieć posortowane dane bez dublikatów i iterować od wartości max do wymaganej (o ile to możliwe). Uznałem że najlepszy będzie set
bo już przy wpisaniu znikną dublikaty i będzie posortowane.
Dlaczego uważasz że vector
będzie lepszy? Dojdą przecież dwie operacje które mogą znacznie wydłużyć czas przy większej liczbie danych. (choć vector jest moim ulubionym STL)
Jeżeli chodzi o std::getline i std::istringstream to chciałem spróbować bez striga żeby było szybciej ale chyba przejdę na twoje.
Dzięki.
PS właśnie zrobiłem jak sugerowałaś getline + istringstream = AC, dzięki
@nenow79 wstawianie i wyszukiwanie elementów dla setu ma złożoność logarytmiczną. To się kumuluje i w konsekwencji zajmuje więcej czasu. Nie bez przyczyny set nie ma iteratora z dostępem losowym. Trochę bardziej sensowne jest wstawianie danych do std::unordered_set (hashed & unsorted) z następnym przekopiowaniem go do vectora i sortowaniem.
Gdy chcemy wstawiać dużo elementów na koniec, nie będziemy nic usuwać, ale chcemy w miarę szybko sortować i mieć dostęp losowy to najlepszy jest sam vector.
@narbej nawet tego nie zauważyłem. Muszę przyznać rację
Suggested Topics
Topic | Category | Replies | Views | Activity |
---|---|---|---|---|
FR_08_11 - Gra w bańki | Zbiór zadań | 1 | 169 | Jun '24 |
MBPROB01 - History version in plaintext pl.spoj.com | Zbiór zadań | 6 | 180 | Jul '24 |
TOPSORTL - Porządek leksykograficzny w grafie | Zbiór zadań | 3 | 149 | Jul '24 |
TFRACAL - Kalkulator ułamków | Zbiór zadań | 2 | 145 | Feb 1 |
FR_20_02 - Poszukiwacze skarbów - Błąd w testach? | Zbiór zadań | 1 | 101 | Apr 2 |