44 / 61
May 2018

Tutaj chciałem wpisywanie do tablicy oraz sumowanie dać w jednym forze, żeby kodu było mniej.
Dlatego taki a nie inny for.

Co do vectorów, to jeszcze tego nie poznałem, ale na pewno trochę o tym poczytam.

Sugerując się twoim poprzednim postem, napisałem nowy kod13. Wydaje mi się, że jest znacznie lepszy, co prawda jeszcze go nie doszlifowałem bo sędzia pokazuje błędną odpowiedź :confused: Ale chyba o tym pisałeś prawda?

EDIT:
dodałem

if(zysk<1)
    {
        cout<<"0"<<endl;
        return 0;
    }

Też mi się tak wydaje, ale nadal masz za dużo razy przeglądanie tablicy.

Musisz wymyśleć taki kod [algorytm] w którym naprawdę tylko raz przeglądasz tablicę od początku do końca. Jeżeli przy wczytywaniu szukasz najlepszego miasta, to traktuję taką sytuację jako pierwsze przeglądanie tablicy. Dlaczego? Bo gdy jest tylko wczytywanie do tablicy, swojego rodzaju bufora, [pojemnika], kompilator prawdopodobnie potrafi to “samodzielnie” zoptymalizować - przy ustawionych opcjach optymalizacji. Gdy przy okazji wczytywania jest coś robione dodatkowo, może być już trochę gorzej.
Przy oddzielnych przeglądaniach od najlepszego w dół , a potem w górę dochodzi, może niewielki, ale jednak koszt zorganizowania pętli, a przy okazji zaciemnia to czytelność kodu. Na początku zakładasz zysk = 0, więc może być on tylko lepszy lub pozostać dalej zerowy, przy poprawnie napisanym kodzie. Nie potrzebne jest więc dodatkowe sprawdzanie, a także [błędne?] zerowanie obliczonego już wcześniej zysku, [w kilku miejscach twojego kodu].

Dziękuję ci niezmiernie za pomoc, sędzia zaakceptował kod.

Poczułem mega ulgę, że w końcu się udało, siedziałem nad tym 5-6 godzin, i zrobiłem 4 albo 5 różnie działających programów, jeszcze raz bardzo Ci dziękuje za pomoc :slight_smile: :slight_smile:

Powinieneś niestety usunąć link do działającego kodu.

Teraz powinieneś też zauważyć, że tablica jednak nie jest w tym zadaniu niezbędna.

Kod usunięty, a co do tablicy to zorientowałem sie dosyć szybko, ale o dziwo sędzia pokazał czas bez tablicy 0,08 a z tablicą 0,07 :stuck_out_tongue:

Napisałem, tylko że nie jest niezbędna. A że czas się zmienił, to nic dziwnego, raz będzie tak innym razem tak, ale chyba nie chodzi Ci tylko i wyłącznie o czas i o AC? :grinning: :tongue:

Jeżeli jednak zależy Ci na czasie, to mozesz dodać linijkę ios::sync_with_stdio (0);
Jeżeli chcesz, mogę Ci wysłać “wygładzony” twój kod na priv.

Nie trzeba :stuck_out_tongue: jestem początkującym programistą, wystarczy mi zwykłe AC :slight_smile:

17 days later

zobacz wynik dla danych, gdzie będziesz miał 50000 miast, każde 100000 (oczywiście łatwiej 5 miast po 1000000000, dane niezgodne e specyfikacją wejścia, ale wynik ten sam)

rozumiem, że przekracza zakres long long inta ale w takim razie jak to obejść skoro na long double również testów nie przechodzi

Myślę, że właśnie udało Ci się znaleźć na czym polega trudność tego zadania :smiley:

PS1
A od kiedy long double można używać kiedy long long int nie działa? Toż to chyba jakiś zelentyzm

PS2
Twój algorytm przechodzi np po zastosowaniu BigIntów (przynajmniej tych mojego autorstwa). Pytanie, czy potrzebujesz takiej klasy, zostawiam otwarte :slight_smile:

Właśnie dostałem accept, dzięki za pomoc.
btw poprzedni pomysł z long double też by przeszedł tylko skrócony wynik gryzł się z oczekiwanym przez sprawdzarkę wystarczyło ustawić precyzję.

proponuję, abyś zapoznał się z zakresami i dokładnością typów w C/C++, jest to omówione na początku każdego dobrego podręcznika C/C++ - a te informacje przydadzą CI się jeszcze wiele razy przy rozwiązywaniu zadań na spoj-u.

2 months later

Czesc, siedze juz jakis czas nad tym kodem i nie moge wymyslec gdzie robie błąd- proszę o jakąś wskazówke. Dopiero zaczynam przygode z C++ stąd proszę o wyrozumiałość - z góry dzięki za wsparcie.

Poprawiłem ale dalej dostaje błąd wrrrr… Czy mogę prosić o jeszcze jedną wskazówkę?

PS.Dzięki za pomoc

Twój kod jest strasznie skomplikowany jak na coś co można rozwiązaćw trzech liniach… Może zamiast usilnie poprawiać ten algorytm:

  1. zapoznaj się z funkcją max
  2. zapoznaj się z algorytmem Kadane (rozwiązanie tego problemu strasznie mi przypomina ten algorytm)
  3. pomyśl nad tym problemem wykorzystując wiedzę z 2)

Myślę, że da Ci to dużo więcej teraz i w przyszłości niż poprawianie obecnego kodu.

Dzięki wielkie za pomoc, po zastosowaniu się do uwag zadanie staję się znacznie prostsze.
Ale mi wstyd, że tak z tym kombinowałem - rzeczywiście wystarczą trzy linijki kodu… :open_mouth:

Wstyd byłby w bardziej publicznym i ocenianym przez innych miejscu, np na Githubie :wink: Tu robisz głupotę, śmiejesz się z niej, możesz się samokrytykować (spodobał mi się komentarz jednego użytkownika typu “ale ze mnie psiocha” :wink: ), potem dostajesz AC pięknym algorytmem, piszesz projekt jakich mało, publikujesz i nikt nie wie, że to powstawało w “bulu i nadzieji” przy setnym WA i to na SPOJu :wink:

Oczywiście by samemu coś porządnego skodować (także algorytmicznego, np. B-drzewo) trzeba trochę tych zadań, frustracji, samokrytyki, poprawiania algorytmów, psioch no i wreszcie AC, ale spokojnie :wink:

1 year later


w czym problem ?

Test poniższy nie jest zgodny z treścia zadania, ale zastępuje setki linijek wejściowych oraz obrazuje problem
wejście
2
123456789
123456789
wyjście
246913578
PS. Jesli trzeba mogę podpowiedzieć bardziej.