1 / 6
Jun 2024

Witam.

Od jakiegoś czasu piszę sobie kody na SPOJu w języku C. Do tej pory nie było problemu. Jednak przy zadaniu PP0504B poniżej zadania podany jest kod źródłowy, który jak mniemam sprawdza później sędzia. Nie bardzo rozumiem w jaki sposób kod jest sprawdzany w innych językach niż C++. W C tablice alokowane dynamicznie działają dosyć specyficznie (malloc, calloc i realloc), wobec czego prosty program zaczyna być dosyć skomplikowany. Pytanie brzmi, czy dostanę gwarancję, że sędzia zaakceptuje mój kod w C, jeżeli będzie wyglądać nieco inaczej niż kod podany pod zadaniem? Chciałbym uniknąć sytuacji, w której siedzę nad kodem, który nie ma możliwości spełnienia wymagań sędziego. Czy ktoś napisał ten program w C i sędzia go zaakceptował? Z góry dziękuję za pomoc.

Pozdrawiam,
Marek.

  • created

    Jun '24
  • last reply

    Jun '24
  • 5

    replies

  • 159

    views

  • 3

    users

  • 5

    likes

  • 2

    links

Tak, odpowiedź brzmi tak, daję Ci taką gwarancję.

Proszę o jakieś wskazówki.

  • Funkcja main() wygląda niemal identycznie jak we wzorcu z C++.
  • Funkcja string_merge() pobiera dwa argumenty - wskaźniki char*, oraz zwraca podobny wskaźnik do alokowanej dynamicznie tablicy znaków.
    Przy założeniu, że dane wejściowe pobierane są zawsze w prawidłowym formacie, tj. pierwsza linia - liczba testów (pojedyncza liczba), oraz w kolejnych liniach - po dwa ciągi znaków oddzielone spacją, program daje prawidłowy wynik. Skończyły mi się pomysły co może być źle. Z góry dziękuję za odpowiedź. Kod z ideone.com4 poniżej.

Najpierw proszę, przeczytaj to: Jeśli zaczynasz, przeczytaj koniecznie! <--kliknij w to proszę!
Sędzię zupełnie nie obchodzi twój kod [przynajmniej w tym i w większości zadań]. Sędzia sprawdza tylko co tam twój program wypisuje. Więc język programowania też nie jest ważny, ani jak napiszesz program.

Pod zadaniem jest tylko szkielet rozwiązania, trzeba samemu uzupełnić go.

W wielu wątkach, dotyczących tego zadania, był już twój problem objaśniony [patrz pierwsze zdanie w tym poście]

Jeżeli używasz funkcji printf do drukowania, to sam wskażnik do początku stringu [tablicy] nie wystarczy. ZERO, ZERO, ZERO <— zapewnij je w odpowiednim miejscu [wystarczy tylko jedno 0]
Przekieruj wyjście [przekierowania <-- np wikipedia] do pliku i dokładnie go obejrzyj w edytorze hex.

Twój program czasami zadziała poprawnie, ale często nie - pomyśl dlaczego. Dwa, trzy zdania wyżej jest odpowiedź.

Przeczytaj post narbeja, ze zrozumieniem i pewnie trzeba nieco sie doszkolić co do tablic char[]. Jedna linijka w twoim kodzie i jest AC.