1 / 20
Feb 2017

1) A sprawdzałeś co twój program wypluwa dla przykładowych danych? Wygląda na to, że chyba nie :wink:
2) Pousuwaj wszystkie swoje printy, sędzia podczas sprawdzania uzna je za błędny output (i słusznie).
3) Raczej kiepski nawyk:

program (unsigned short uczestnikow, long pudelko)

Na SPOJ-u pewnie się nawet nie skompiluje; dodaj typ, zwłaszcza, że potem chcesz zrobić

cout << program(uczestnikow, pudelko) << endl;

Samego algorytmu nie sprawdziłem, zważywszy, że pkt. 1, 2 i 3 są wystarczające do uzyskania WA :wink: .

dodadkowo:

cout << "podaj czas zjedzenia cistka: "

takie linijki są niepotrzebne i powodują WA

witam mam problem z przekroczonym limitem czas
pierwszy program zrobiłem na klasach bo się ich obecnie uczę, ale na wszystkich zgłoszeniach wywalało mi ze przekroczyłem czasu. Postanowiłem go poprawić na taki zwykły kod. Jako pętli użyłem while, ale miałem to samo wiec zmieniłem na for ale dalej mam to samo tu podaje link do programu
https://ideone.com/ClT3f524

Czy jesteś zadowolony z czasu wykonania Twojego programu dla liczb wejściowych zbliżonych do maksymalnych granic?

No chwile się wykonuje. Chodzi wam o to że nie mam w programie tych ograniczników jak w zadaniu?

Nie, chodzi o to, że ta "chwila" to za długo :wink: . Winien temu jest nieszczególny algorytm odpowiedzialny za wyliczanie, ile ciastek zje jeden Obżartuch.

Jeśli nie jeszcze nie widzisz, gdzie problem, to przejdź z debugerem przez swój program dla takiego testu i zobacz, gdzie stracisz (sic!) najwięcej czasu:

1
1 86399
1

A najlepiej, np na ideone.com, zrób sobie taki test:
5
1 1000000000
86400
1 1000000000
86400
1 1000000000
86400
1 1000000000
86400
1 1000000000
86400

Zamiast 5 mogłoby być np 10 albo 100, ale twój kod i tak zrobi [na ideone] tylko dwa pierwsze testy [na ideone jest aż 5 sek limit]
Zamiast 86400, mogłoby być troszkę mniej i różne wartości w kolejnych testach i tak samo różna ilość ciastek w pudełku w kolejnych testach, [np 999999990.. 999999999] a i tak będzie to samo [tle] . Chodzi o liczene czy będzie potrzebne jedno pudełko czy jednak jedno wystarczy.

PS
Oczywiście nie ma znaczenia, czy użyłbyś klas czy nie, bo tu nie były winne klasy, tylko słaby [błędny, bo za wolny] algorytm. Ocywiście nie cały algorytm, tylko w miejscu decyzji, ile kupić pudełek.

PS
W twoim kodzie, chyba raczej, dla mojego testu, czy zero pudełek wystarczy, czy trzeba kupić jednak tylko jedno całe pudełko.

Z tego co zobaczyłem na debuggerzer to mam problem z while gdzie obliczam ilość ciastek zjedzonych przez ciastka w opakowaniu. Kurcze muszę nad tym pomyśleć
I jeszcze jedno wyniki z tego
1
1 36399
1
to 2 tak ??

:wink: To faktycznie masz problem, jak ciastka zjadają same siebie :wink:

Skąd taki wniosek i skąd takie pytanie? Jak nie wiesz jaki jest dla takiego testu wynik - przecież, dla takiego prostego przykładu, możesz sobie policzyć na kartce papieru, to jak chcesz napisać-poprawić program?

A może swoim programem byś to policzył, jeżeli nie potrafisz "ręcznie", przecież on w końcu dobrze liczy, tyle, że za wolno!

Było tram że jeśli obżartuch jest wstanie zjeść ciastko przed końcem czasu to się liczy a organizatorzy mogą kupić więcej ciastek i to by pasował bo obżartuch jest wstanie zjeść jeszcze jedno ciastko i dlatego trzeba kupić jeszcze jedną paczke

Nie bardzo rozumiem, o czym piszesz i po co? Może głośno mówisz [piszesz] do siebie? Przypominasz sobie dopiero, o co chodzi w zadaniu, piszesz z pamięci? Przecież wszyscy, którzy zrobili to zadanie, wiedzą dokładnie o co chodzi. Na wszelki wypadek zerknąłem na treść zadania: http://pl.spoj.com/problems/GLUTTON/2 i poniżej dokładnie:
"..uczestnikowi nie wolno napocząć ciastka jeśli wie, że nie zdąży go zjeść przed końcem doby"

Nie mogą, ale muszą.

Niby to to samo, co napisałeś, ale programowanie wymaga ścisłości i dokładności, więc tego się trzymajmy i starajmy się pisać jak najdokładniej.

PS
Te moje pytania [retoryczne] na początku, to dlatego, że zaczynam podejrzewać, że wziąłeś kawałek gotowego kodu i dopiero teraz zaczynasz kombinować, jak to wszystko działa. SOrry, jeżli się mylę.

PS 2
Niezależnie od PS 1, może zamiast pytać, powinieneś poczytać: http://discuss.spoj.com/search?q=ob%C5%BCartuchy

PS 3
Wywal tą pętle:
while (eatCookies%cookiesBox != 0) {
++eatCookies;
}
i pomyśl jak to zrobić inaczej, bo ani while ani for nie są w stanie zmieścić się w czasie i stąd tle. Pomyśl, jak Ty byś to policzył "ręcznie".

Dobra bo może ja źle rozwiązuje przykład ale opisę jak to robie na kartce:

weżmy przykłąd 1:
mam
2 10
3600
1800
to robię tak 86400/3600 i tu mi wyjdzie 24 później 86400/1800 48 i później dodaje 24 i 48 wychodzi 72 wiec mam 8 ciastek mniej ale uczestnicy zjedzą je przed 24h wiec trzeba kupić 8 paczek czyli 80 ciastek wiec jak robię
1 86399
1
to 86400/1 to mam 86400 i widać że uczestnik zdąży zjeść 1 ciastko z nowej paczki bo je 1 sekundę wiec się zmieści w czasie to mi się wydaje że trzeba kupić 2 paczki ciastek.

Jeśli się mylę to proszę o wytłumaczenie bo mi się wydaje że to jest dobre rozumowanie.

Program sam zrobiłem nie widzę sensu w tym by od kogoś go brać bo wżyciu programowania się nie nauczę :smiley:

Poniższy fragment, zasugerował mi, że dopiero "dojrzewasz" i zaczynasz pojmować o co chodzi w tym zadaniu:

Dlatego wysnułem takie niecne podejrzenie wobec Ciebie.
Problem jest taki, że musisz być pewny swego, a nie pisać, że Ci się wydaje. Dodatkowo, twoje tłumaczenie jest za bardzo zawiłe i gdybym nie wiedział o co chodzi, to miałbym chyba trudności w ich zrozumieniu. Aby niepotrzebnie nieprzedłużać.
Powtórz [naucz się] czym się różni dzielenie całkowitoliczbowe od dzielenia zmiennoprzecinkowego. Poszukaj funkcji podłoga, sufit [in english] funkcji zaokrąglającej i jakich potrzebują parametrów.
Poćwicz sobie z tymi funkcjami, pisząc mini programy:
cout << funkcja(dane) << endl;
gdzie dane to np 10/3, 10.0/3, 10/3.0, (double)10/7 .... itd
Także bez funkcji:
cout << 10/3
cout << (10+3-1)/3
ogólnie poćwicz takie coś:
cout << (m+n-1)/n
cout << 72/10 + 1 jeżeli dzielenie nie było całkowite :wink:
lub
cout << 80/10 + 0 jeżeli udało się podzielić "ładnie" :wink:

Tutaj, wżyciu, nie ma prostej drogi na skróty, usłanej różami i czerwonym dywanem, więc czasami też trzeba brać i uczyć się od innych [najlepiej [naj]lepszych]

Co do while już wykasowałem i dołożyłem coś takiego:
if (eatCookies%cookiesBox == 1) {
result = eatCookies/cookiesBox;
result = result + 1;
}
else {
result = eatCookies/cookiesBox;
}
Tylko co jest nie tak dostałem błędną odpowiedz ??

26 days later

//Tu był kod do zadania//

Proszę o spojrzenie na kod. Nie mam pojęcia, czemu sędzia pluje błędną odpowiedzią.

Przeczytaj uważnie treść zadania i zwróć szczególną uwagę na to co autor umieścił w jednym z nawiasów.

Dzięki wielkie, poprawiłem.

Nie ogarnąłem na początku, że jeżeli obżartuch je dłużej ciastko niż dobę, to w ogóle nie kupujemy mu ciastka.