16 / 35
Aug 2017

Rzeczywiście dało się uprościć ten kod znacznie. Dzięki za wszystkie wskazówki.
Niestety dalej WA, teraz to już nie wiem czy problem leży w warunkach czy cały algorytm sprawdzania jest zły.
Czy jest możliwość sprawdzić na jakim teście wychodzi błąd?

Poniżej poprawiony kod z WA:
Tutaj był kod wink [AC]

  1. Czy 0 dzieli się bez reszty przez 6?
  2. Ten warunek || (sum0 - sum1) == 0 nie jest błędem ale jest nadmiarowy i zbędny .
  3. Dodaj koniecznie ios_base::sync_with_stdio(0);, bo bez tego tle.
  4. Pierwszy warunek można uprościć do: if (liczba == "0") // tym razem podwójny cudzysłów.

PS
5. zamiast: if (i % 2 == 0) można: if (i & 1 == 0) lub if (i & 1) + zmiana kolejności bo i & 1 = i%2 == 1
PS 2 wink
6. t_sum jest nadmiarowy i potrzebny jednorazowo wink Możesz if((sum0 + sum1) % .......)

Ad.1 a czy to ma jakieś znaczenie? jak jest 0 to się ta część kodu nie wykonuje, chyba że odnosi się to do pkt.2, wtedy rzeczywiście "|| (sum0 - sum1) == 0" ta część była zbędna.
Ad.3 Cały czas miałem WA, wiec nie dodałem.
Wskazówki pomocne, jednak cały czas WA. frowning

Edit:
W końcu zaliczone. Wielkie dzięki Narbej za porady wink Głupie przeoczenie z mojej strony.

Pytanie 1 odnosi się do podstawowego pytania "to be or not to be" smile czyli TAK/NIE:
if (x == 1 && liczba[0] == '0')
Czy bez reszty 0 dzieli się bez 6 bez 8 i bez 343 !?

1 year later

zupełnie nie rozumiem, co znaczy, że w wielu testach uzyskujesz poprawne odpowiedzi - czy znasz takie testy dla których uzyskujesz niepoprawne ?

natomiast rozumiem, dlaczego sędzia ci daje WA - powód prosty, nie zrozumiałeś treści zadania, przeczytaj jeszcze raz dokładnie, albo dwa, trzy ... razy, aż do pełnego zrozumienia

PS. istnieje bardzo małe prawdopodobieństwo, że używając Python-a zmieścisz się w czasie - tylko dwa zaliczone rozwiązania nie są C/C++, jedno Pascal, i jedno w ASM :slight_smile:

"pomimo że w wielu testach uzysuję poprawne odpowiedzi"

pisząc to miałem po prostu na myśli to, że wprowadzałem wiele liczb podzielnych przez 6,8 czy 343 i program działa bez zarzutu tzn. prawidłowo klasyfikuje to czy liczba jest pozielna przez powyższe wartości czy nie
teraz dopiero zauważyłem dlaczego dostaję WA :smiley: , jednak warto dokładnie czytac polecenia :slight_smile:
udało mi się naprawić błąd i tak jak wspomniałeś używając Pythona nie mieszczę się w czasie (ale spróbuję może to jakos ulepszyć) :smiley:

3 years later

Uzyskałem Twoim kodem AC po poprawieniu aż JEDNEGO przypadku będącego JEDNĄ liczbą, dla którego 3x zwracasz złą odpowiedź. Sądząc po testach na Ideone, przeczuwasz, o którą liczbę może chodzić :slight_smile:

Dzięki. Zaliczone gdzieś mi to umknęło bo byłem pewien że sprawdzałem jak to jest z tym przypadkiem.

10 months later

Potwierdzam w Pythonie3 nie ma szans tego wykonać, w C++ przeszło z czasem 0.06s

Zastanawia mnie tylko czy osoby które uzyskały 0.00 cudują z very fast i/o czy też mają bardziej zoptymalizowany algorytm. Szkoda, że ten portal nie umożliwia podglądu w kody innych tak jak np. Codewars (oczywiście po uzyskaniu AC). Można byłoby się wiele nauczyć.

W 90% to kwestia fast I/O. Reszta to optymalny kod, czasem lepszy algorytm, a nawet wysłanie zgłoszenia o odpowiedniej porze (ten samo kod, potrafi mieć różne czasy, w zależności od pory dnia lub nocy).

… fazy księżyca, plam i wybuchów na słońcu, układ planet i gwiazd … i wiele innych zjawisk na niebie i ziemi o których nawet filozofom się nie śniło! :wink:

A tak na serio Spoj “działa” nie na systemie RTS ale na [nie]zwykłym linuxie, wielozadaniowym i wieloużytkownikowym systemie z wywłaszczniem zadań i zasobów itd itp, więc takie zjawiska nie powinny być chyba dziwne. Dodatkowo zmiany hardware i software [nowsze wersje kompilatorów i bibliotek] też wpływają na wynikowy kod i na czas działania czasami na plus a czasami na minus.

Podglądanie nie jest najlepszą metodą nauki. Inni piszą kody po to aby uzyskać AC a nie aby były wzorcowe jako podstawa do nauki programowania. Przez pewien czas była taka możliwość, podglądania, na portalu Mariusza. Nie wystarczy tylko sama chęć obejrzenia kodu i uzyskanie AC. Musi jeszcze być zgoda autora kodu. A na samym spoju taka możliwość jest w gałęzi podstawy programowania.
Innym sposobem jest po prostu napisanie własnego zadania i wstawienie go tu na spoja. Wtedy jako problem setter, w “nagrodę” możesz sobie oglądać wszystkie zgłoszone kody, jeżeli uważasz, że się tą metodą dużo nauczysz. Moim zdaniem lepsza jest metoda książka i jej studiowanie lub guru i jego pomoc. Trochę gortsza to kursy internetowe i fora dyskusyjne, różnej, czasami bardzo marnej jakości.

I jeszcze jedna sprawa. Też jestem stary i gdzieś tam mam zakładki w książce z karty perforowanej [nie taśmy], używałem suwaka logarytmicznego i pisałem jakiś program w Algolu na Odrę. Ale gdy trafiłem na Spoja, a właściwie na forum, to najpierw tylko czytałem, a dopiero dużo póżniej pytałem i proponowałem swoje wynalzki i pomysły. Spoj nie jest portalem edukacyjnym do nauki programowania, tylko do sprawdzania zdobytej wiedzy. Ktoś napisał mi, że przez złe sędziowanie na spoju ktoś tam zraził się do programowania. No i może dobrze. Widocznie do zostania programistą trzeba mieć także odporność na drobne niedogodności. I jeszcze dla malkontentów. Sprawdzcie i porównajcie sobie proszę, jak są oceniane nadsyłane kody na Potyczkach Algorytmicznych, Olimpiadach Informatycznych, także Międzynarodowej, Akademickich Mistrzostwach itd czy innych podobnych tego typu konkursach.

Ja osobiscie wolę i chciałbym aby Spoj w ogóle był i działał tak jak działa jak najdłużej niż zniknął i przestał istnieć. Wiem, że nie jest doskonały, ale może po prostu już się przyzwyczaiłem do drobnych niedogodności Spoja!

Na Codevars to się bardzo sprawdza, dlatego że społeczność ma możliwość oceniania kodów. Jak rozwiążesz zadania masz podgląd na kody innych posortowane od najlepiej ocenionych, co znaczy że w pierwszej kolejności dostajesz najlepsze rozwiązania. Wtedy widzisz jak piszą kody najlepsi, jakich używają algorytmów, jakich i/o, jak nazywają zmienne, jak wygląda czysty dobry kod.
Na spoju możesz 20 lat siedzieć i cały czas będziesz popełniał te same błędy, nie wiedząc nawet że je popełniasz.

Na forum pasja-informatyki inaczej to jest ptzedstawione. Tam jest spoj mocno rekomendowany dla początkujących do nauki algorytmiki. Teraz widzę że jest zupełnie przeciwnie.

Nauka algorytmiki != nauka podstaw jakiegoś, dowolnego, języka programowania!

Nie czepiaj się szczegółów. Ogólnie spoj nie jest w żaden sposób edukacyjny.
Można pokusić się o stwierdzenie, że czas poświęcony tutaj jest zmarnowany.

Bardzo przykro słyszeć coś takiego.
A mówię to jako osoba, która wszystko co umie i wie o algorytmice nauczyła się właśnie dzięki SPOJowi

"Można pokusić się o stwierdzenie, że czas poświęcony tutaj jest zmarnowany."
Bardzo ostre stwierdzenie uważam, że jest niesprawiedliwe.
Z mojego punktu widzenia SPOJ jest bardzo użyteczny, wiele z niego skorzystałem.
Doceńmy też pracę wielu ludzi, dających od siebie bardzo dużo by SPOJ mógł funkcjonować. Bardzo łatwo jest krytykować