Każdy inny? Zadanie nie polega na znalezieniu szukanej literki, policzeniu jej i wypisaniu poprawionego tekstu, a Ty mniej więcej to robisz. Jeżeli więc zrobisz tylko jedno z poniższych [lub wszystko]:
zrezygnujesz z kasowania
zrezygnujesz z wyszukiwania - metodą find - za każdym razem od początku stringa
tylko jednokrotnie przejście stringu i dodawanie wystąpienia danej literki do tablicy wystąpień
Witam Mam problem z tym zadankiem, a konkretniej z vectorami. Sprawdzalam krok po kroku gdzie jest blad i zaznaczylam ten fragment, jakby ktos wiedzial o co chodzi to bylabym bardzo wdzieczna za kazda odpowiedz PS Nie zwracajcie uwagi na to, ze najpierw wyswietlane sa duze litery - jeszcze nie napisalam tego w kodzie, zajme sie tym potem. PS2 Kod jest w trybie roboczym, wiec moze nie byc do konca jasny. Potem ladnie go streszcze i bedzie cacy Moj kod: https://ideone.com/9iB1EG22
Cześć. Mam mały problem z tym zadankiem, sprawdzałem na wielu testach, wszystko w porządku. Na ideone też jest ok. Spoj mi nie przyjmuje wyrzuca błąd kompilacji. Nie ma problemu, moge to zrobić w inny sposób, jednak jestem ciekaw, dlaczego to nie chce pyknąć, za wszystkie uwagi byłbym bardzo wdzięczny http://ideone.com/5SJVSh66
Dzięki śliczne, działa, wystarczyło wybrać 6.3. Z tym błędem kompilacji też już wcześniej próbwałem, ale nie do końca rozumiałem co mi wyskakiwało, za małą wiedze mam na ten moment.
Po prostu jej nie używaj. Zamiast getch() użyj getchar() i pamiętaj, że w unix, a więc na spoju i ideone enter = 10, a nie 13.
getchar() jest w bibliotece standartowej [cstdio ~= stdio.h]
Ideone11 Skorzystałem z rady, ale na SPOJu wyskakuje mi błędna odpowiedź, a na Ideone przekroczenie limitu czasu, mimo, że na komputerze kompiluje się w ułamku sekundy Czy lista to w tym wypadku zły pojemnik na dane? Powinienem zmienić koncepcję?
Jeżeli zdanie to zinterpretuję jako ukrytą implikację typu “jeżeli u mnie kompiluje się (w ułamku sekundy) to nie może być, że na SPOJu mam WA i nie może być, że na Ideone mam TLE” to na prawdę nie rozumiem o co Ci chodzi.
Kompilować się kompiluje. I nie działa. Tyle. Na pocieszenie: to dotyczy ponad 90% kodów, jakie kiedykolwiek zostały stworzone
Formalnie możesz używać nawet drzewa czerwono-czarnego, mapy itd. SPOJ puści największą bzdurę, jak już się przekonałeś dotyczy to także listy
Tak. Nie wiem skąd pomysł na użycie listy chyba, że po prostu w celu edukacyjnym i faktycznie wiesz co robisz.
Czemu lista jest złym pomysłem w tym przypadku? Pytam poważnie i prosiłbym o uzasadnienie, bo taka lista wydawała mi się lepszym pomysłem niż stworzenie dużej tablicy i marnowanie pamięci. Jeśli nie lista, to w takim razie jaki inny pojemnik na dane?
Nie bardzo też rozumiem mechanizmu działania Ideone. Jeśli limit czasu to 5s, to czy przy tak małym programie i jednym teście jest możliwe, abym przekroczył ten czas tylko ze względu na użycie listy jako pojemnika na dane?
Jeżeli Twoim celem jest oszczędzenie pamięci to oczywiście zmienia postać rzeczy i może nawet lista jest dobrym rozwiązaniem (nie chce mi się nad tym myśleć). Nad czym myśleć? Nie wiem jak Twoje rozumowanie ma się do wady listy, że każdy element listy ciągnie więcej pamięci niż każdy element tablicy Mam też pewną obawę (z tego co widzę w kodzie całkiem zasadną), że w swoim rozwiązaniu używasz w cholerę pamięci w porównaniu ze zwykłą tablicą około 50-elementową Pomijam już kwestię sortowania, które nie jest potrzebne w przypadku tablicy, a kosztuje czasowo dość wiele.
Powiem tak - w celach edukacyjnych można wiele. Sam pamiętam zadanie, nad którym nie chciało mi się myśleć więc kilka z możliwych rozwiązań zabrałem z neta a resztę liczyłem na bieżąco w trakcie wykonywania programu Nota bene kultowa technika w konkursach algorytmicznych, której nazwę możesz sobie wygooglować, a która jest kluczem do rozwiązania niektórych zadań na SPOJu, a rozwiązanie innych ułatwia.
W celach dydaktycznych możesz spróbować ogarnąć to zadanie na mapach/setach. Wybór właściwego kontenera z wymienionych zostawiam Tobie.
Można stworzyć nawet mniejszy o tym samym działaniu. Program dostaje TLE ponieważ najpewniej nie wychodzisz z pętli i wykonujesz go w nieskończoność.
Dlaczego uważasz, że lista jest nie marnowaniem pamięci? Przecież w liście dodatkowo trzeba gdzieś pamiętać wskaźniki [co najmniej jeden do następnego elementu, plus ewentualnie do poprzednika]. Jak myślisz, gdzie one są pamiętane? W powietrzu, czy w marnowanej pamięci?. Jesyeś początkującym adeptem, więc na razie nie martw się marnowaniem pamięci. Najpierw zrób działający program, a potem go optymalizuj, pod względem zużycia pamięci, prędkości itd. W tym zadaniu najlepsza i najprostsza metoda, to umiejętne użycie tablicy [małej].
PS
Na ideone podałeś zły test, typu:
3
dane [enter]
dane [enter]
dane [EOF]
więc zabrakło ostatniego entera i program czeka w nieskończoność w pętli.
Popraw[ny] test do tego zadania to:
3
dane [enter]
dane [enter]
dane [enter]
[EOF]
Chodziło mi o “marnotrawienie” pamięci. Intuicja podpowiadała mi, że bardziej elegancko będzie zużyć pamięć na wskaźniki, niż na deklarowanie za dużej tablicy na zapas, jak widać nie do końca dobrze, ale chciałem też wykorzystać w praktyce jakiś pojemnik na dane, inny niż tablica, bo do tej pory ich nie używałem.
Teraz Ideone pokazuje mi inny wynik testu, niż jakbym wpisał go ręcznie: Ideone2 pokazuje poprawny wynik, gdy fragment kodu jest zakomentowany, natomiast w konsoli wyświetla mi się taki sam wynik, gdy usunę komentarz.
Kolejne pytanie, być może trywialne, ale czy na końcu danych wejściowych w zadaniu też jest [enter]?