95 / 192
Sep 2016

czy naprawdę uważasz, że

Podaj liczbe testow: Podaj liczbe uczestnikow, a po spacji liczbe ciastek w pudelku: Podaj czas jedzenia ciasteczka dla kazdego uczestnika: Nalezy kupic 8 pudelek ciastek.
Podaj liczbe uczestnikow, a po spacji liczbe ciastek w pudelku: Podaj czas jedzenia ciasteczka dla kazdego uczestnika: Nalezy kupic 2 pudelek ciastek.

to jest to samo co:

8
2

Wydawalo mi się, że komentarze skierowane do użytkownika nie będą miały znaczenia dla działania programu. W każdym razie, po ich wykomentowaniu spoj akceptuje program. Dziękuję.

To nie są komentarza - to wyjście programu. A na wyjściu programu musi być dokładnie to, co sobie życzy autor programu, różnice mogą się pojawić tylko w białych znakach, a i to nie zawsze

Mam podobny problem do kolegi wyżej z tym że prócz błędu SIGSEGV w SPOJ pokazuje mi w ideone.com że kompilator oddaje na końcu informację "inf" czy może mi ktoś powiedzieć skąd się to bierze i dlaczego sędzia odrzuca zadanie ? czy to właśnie dla tego ?
https://ideone.com/n1KNuK4

  1. Czy sądzisz, że: ".. N ≤ 10.000.." <==> N ≤ 10 ??
  2. Po jaką ... używasz w ogóle tablicy??
  3. Jak wyżej, ... typu float??
  4. Jak wyżej, zmiennych globalnych ?

Z powodu błędu w 13 linii twojego programu.
inf === infinity === wartość niewyobrażalnie duża, lub wyobrażalna, ale przekraczająca maks wartość [pojemność] użytego typu zmiennej.

:PS
Warto uważniej czytać treść zadania - powtórzyć to czytanie, przy problemach z zaliczeniem, a potem, gdy pytasz na forum, warto uważnie przeczytać i przemyśleć cały wątek/wątki na temat.

Rozumiem już Dzięki za pomoc Narbej. Teraz wiem że zadania mają być zrobione dokładnie z instrukcją. Zabieram się zatem do rozwiązania! :slight_smile:

13 days later

Witam wszystkich Panowie mam problem z obżartuchami takiego rodzaju, że ten int nie zaokrągla mi pudełek w górę tylko w dół dlatego przy pierwszym teście wychodzi mi 6 pudełek a nie 8. Kod masakra wiem dopiero się uczę z góry dzięki za pomoc.

include

using namespace std;

int main()
{
int ilosc_testow;
int ilosc_obzartuchow[100];
int ile_ciastek[100];
int doba=3600*24;
int j=0;
int obzartuchy[1000];
int liczba_pudelek=0;
int pudelka=0;



cin>>ilosc_testow;

for (int i=0 ;i<ilosc_testow; i++)
{
   cin>>ilosc_obzartuchow[i]>>ile_ciastek[i];

   while(j<ilosc_obzartuchow[i])
   {
       cin>>obzartuchy[i];
       liczba_pudelek+=((doba/obzartuchy[i])/ile_ciastek[i]);
       j++;
   }
    
    j=0;
    cout<<"Ilosc paczek ciatek dla testu nr."<<i+1<<" wynosi: "<<liczba_pudelek<<endl;
}

return 0;

}

  1. Zaznacza się cały kod i dopiero klika w </> lub wkleja kod na ideone.com, a tu link do wykonanego tam testu.
  2. SPOJ raczej nie służy do nauki [programowania] a do, swoją drogą w bardzo atrakcyjnej formie, testowania i utrwalania swoich umiejętności i porównywania z umiejętnościami innych [już coś kolwiek umiejących] programistów. Do tego [nauki] jest literatura i nauczyciele, a wybacz ja nie jestem.
  3. bonus [number 2]: ---> http://213.192.104.217/phpBB3-spoj-pl-backup/viewtopic.php?f=1&t=1214&sid=473a6ed0abb4ff296004debda0fd65457 , ze szczególnym uwzględnieniem pkt 10
  4. warto też poczytać posty w tym wątku + posty w innych wątkach dotyczących tego zadania: http://discuss.spoj.com/search?q=ob%C5%BCartuchy
  5. Podstawą jest treść zadania, którą trzeba czytać, czytać i jeszcze raz czytać aż do zrozumienia, a szczególnie gdy ma się z nim problemy: "Na podstawie tych danych, organizatorzy Zlotu chcą określić ile należy kupić ciastek", a dopiero potem, liczą ile to pudełek: "ciastka w sklepie sprzedawane są w pudełkach o stałej wielkości". Z twojego kodu widać, że tego niestety nie zauważyłeś/nie uwzględniłeś.
20 days later

Witam! Mam problem z zadaniem Obżartuchy, kod sprawdzałem na ideone i wyniki mam dobre, ale sędzia pokazuje mi błąd wykonania (SIGSEGV). Dopiero niedawno zacząłem naukę programowanie i nie mam pojęcia czemu mi nie przyjmuje tego kodu. Proszę o pomoc.

#include <iostream>

using namespace std;
int prob;
int main()
{
    cin>>prob;
    for (int i=0;i<prob;i++)
    {
       int  pudelka=0, ile_o, ciastka, czas[100], suma=0,doba=86400;
       float x[100];
        cin>>ile_o>>ciastka;
        for(int i=0;i<ile_o;i++)
        {
            cin>>czas[i];
        }
 for(int i=0;i<ile_o;i++)
 {

     if (x[i]=doba%czas[i]==0)
        {
            x[i]=doba/czas[i];
        }
     else
        {
            x[i]=(doba/czas[i])-1;
        }
        suma+=x[i];
}
    if (suma%ciastka==0)
        {
            pudelka+=suma/ciastka;
            cout<<pudelka<<endl;
        }
    else
        {
            pudelka+=(suma/ciastka)+1;
            cout<<pudelka<<endl;
        }
    }
    return 0;
}

Warto najpierw nauczyć się czytać! :wink: Czytać ze zrozumieniem, więc może wróć i zacznij od tego?
W poście nad twoim umieściłem kilka bezcennych rad, przeczytaj i zastosuj się chociaż do pkt. 1 i 5. To ja osobiście, wyedytowałem i poprawiłem Ci formatowanie twojego błędnie wklejonego kodu.
Przemyśl też koniecznie pkt 5. Poniżej malutki fragmencik z treści zadania:

... W pierwszej linii znajdują się dwie liczby całkowite N i M oddzielone pojedynczą spacją (1 ≤ N ≤ 10.000, 1 ≤ M ≤ 1.000.000.000). Oznaczają one odpowiednio liczbę zaproszonych obżartuchów na Zlot oraz liczbę ciastek ....

Czy naprawdę sądzisz, że czas[100] jest na tyle rozciągliwy, aby pomieścić 10000 obżartuchów? Po kiego, tak w ogóle, potrzebne jest Ci wpychanie ich wszystkich w jedną ciasną klatkę? Czy nie możesz, spytać pierwszego, tylko o to, ile czasu je ciastko, zapamiętać [przetworzyć], wpuścić go na Zlot i przejść do następnego?

Całą resztę twojego rozwlekłego kodu, kładę na karb tego, że się dopiero lub zaczniesz uczyć czytać :wink:. Życzę powodzenia i wytrwałości.

PS
SIGSEGV wynika właśnie z powodu nierozciągliwości twojego czasu i grzebania po nie przydzielonej pamięci.

PS 2
instrukcja:
x = doba/czas - 1;
jest błędem - dzielenie całkowitoliczbowe jest zawsze ucinane[zaokrąglane do liczby całkowitej w dół] i w tym wypadku nic nie zmienia tego faktu, to, że x jest typu float. Najpierw jest tu wykonywane dzielenie całkowitoliczbowe, a dopiero potem wynik tego dzielenia, konwertowany jest na typ float. Wystarczy więc tylko samo:
x = doba/czas;
bez całej reszty sprawdzania modulo etc.

PS 3
Jeszcze lepiej po prostu:

suma += doba/czas;

Wielkie dzięki, po wprowadzeniu poprawek wszystko działa jak należy, faktycznie nie przeczytałem dokładnie polecenia, jeszcze raz dzięki za pomoc :grinning: .

Gratuluję!. :slight_smile:

Może jeszcze parę uwag? :wink:

  1. Unikaj zmiennych globalnych - zmienna ile prób.
  2. Nie żałuj spacji - zobacz np mój ps 3
  3. Jeszcze bardziej wymowne nazwy zmiennych
  4. Zamisat for (.. tutaj można spokojnie while, np while(prob--){ ..
  5. Zamiast: int doba=86400 lepiej const int doba = 24*60*60 // = 86400 obliczone w czasie kompilacji
  6. Zamiast ostatniego bloku if ... else, można cout << ceil ((double) suma/ciastka) ......
    • + include cmath
      lub cout << (suma + ciastka - 1)/ciastka << ......
  7. PS w C tak, w C++ w funkcji main() już nie jest konieczna instrukcja return 0.

Dzięki za rady,na pewno z nich skorzystam i jeszcze raz dzięki za pomoc.

11 months later

Witajcie. Jestem aż tak zły, że muszę wam o tym napisać jaki głupi błąd zrobiłem przez co ciągle mi wyrzucało błąd kompilacji . Spędziłem dzisiaj pół dnia nad tym zadaniem , bo po napisaniu go raz i wyrzucaniu błędu skasowałem wszystko i od nowa napisałem no i bez zmian , ale doszedłem do tego , że nazwałem zmienną z czasem - “time” i za każdym razem błąd kompilacji przez taką pierdołę…

Kompilator zawsze wypisuje komunikat błędu a przy odpowiednim ustawieniu, także ostrzeżenia, więc wystarczy tylko przeczytać i od razu wiedzieć gdzie tkwi problem czy błąd. Tak jest, gdy kompilujesz u siebie lub na ideone. Gdy wysyłasz od razu na spoj’u, wystarczy “kliknąć” w napis błąd kompilacji przy swoim zgłoszeniu i jak wyżej.

2 months later

3600s -> 1 ciastko / h --> 24 ciastka / dobę. Resztę błędów w swoich obliczeniach znajdziesz sam.

11 days later

przygotuj sobie test w pliku:
1
10000 1
1 … 1

oczywiście tych jedynek ma być 10000 :slight_smile: a potem sprawdź wynik

Policzyłem na kartce, że pudełek wtedy wychodzi 864 000 000 000. Int zamieniłem na long long, a float na long double. Zadziałało! Dziękuję :slight_smile:

Mam problem z zaakceptowaniem przez sędziego mojego kodu. Informuje on o błędzie wykonania (SIGSEGV) . Proszę o pomoc i wskazówki jak mogę poprawić kod. Wyniki wychodzą prawidłowe.

#include <iostream>

using namespace std;

int n;

int main()
{
    int t; int suma=0; long m;
    cin>>t;

    for (int j=1; j<=t; j++){
        int tab[n-1]; const int x=24*60*60;
        cin>>n>>m;

        for (int i=0; i<n; i++){
            cin>>tab[i];
            suma+=x/tab[i];}

    double box = suma/m;
    if (box / m >0.1)
      {cout<<box+1<<endl;}
    else
      {cout<<box<<endl;}
    }
}