1 / 7
Oct 2020

Witam, robiłem wyżej wymienione zadanie i mimo tego, że w moim kompilatorze wychodzą dobre odpowiedzi, to SPOJ odrzuca rozwiązanie.
Tutaj kodzik:

#include
#include <math.h>

using namespace std;

int main()
{
int ile;
cin>>ile;
for(int i=0;i<ile;i++)
{
int obzartuchy, ciastka_paczka;
cin>>obzartuchy>>ciastka_paczka;
int czas[100000];
for(int i=0; i<obzartuchy; i++)
{
cin>>czas[i];

       }
    for(int i=0;i<obzartuchy; i++)
    {
        if(czas[i]>86400||czas[i]<0)
        {
                            exit(0);
        }
    }
    for(int i=100000; i>=obzartuchy; i--)
   {
       czas[i]=0;
   }

   int ciastka_obzartuch[100000];
   for(int i=0; i<obzartuchy; i++)
   {
       ciastka_obzartuch[i]=86400/czas[i];
   }
   for(int i=0; i<obzartuchy; i++)
   {
       if(!(ciastka_obzartuch[i]%2==0))
       {
           ciastka_obzartuch[i]--;
       }
   }
   int ciastka = 0;
   for(int i=0; i<obzartuchy; i++)
   {
       ciastka+=ciastka_obzartuch[i];
   }
   int kupione_paczki;
   kupione_paczki = ciastka/ciastka_paczka;


   if(ciastka%ciastka_paczka==0)
   {
       cout<<kupione_paczki;
   }else cout<<kupione_paczki+1;

}

return 0;

}
Mam podejrzenia odnośnie użycia tablic, ale mimo wszystko nie wiem czemu zadanie jest uznawane za błędne, jakby ktoś mógłby nakierować mnie z czego zrezygnować/zmienić to byłbym naprawdę wdzięczny.

  • created

    Oct '20
  • last reply

    Oct '20
  • 6

    replies

  • 910

    views

  • 4

    users

  • 2

    likes

  • 2

    links

NIe rozumiem dlaczego mimo iz jest to ten sam kod praktycznie, jedynie dodaje w tym pierwszym tekst(odkrylem to sprawdzajac po kolei ktora zmienna jest zle liczona), a dokladnie ten sam kod, tylko bez paru cout<<"…"; nie dziala prawidlowo, dokaldnie `
do
{
t1+=n1;
ile_ciastek1+=1;
}

while(t1<=86400);`

daje mi wartosc jeden (ten kod na samym dole daje mi te wartosc)

#include
#include <math.h>

using namespace std;
float ile_paczek;
int ile_ciastek1, ile_ciastek2, ile_ciastek3;
int ile_osob,paczka, ile;
int main()
{ cin>>ile;
for(int i=1; i<=ile;i++)
{
cin>>ile_osob>>paczka;
switch(ile_osob)
{
case 2:
{
int n1, n2, t1, t2;
cin>>n1>>n2;
do
{
t1+=n1;
ile_ciastek1+=1;
}
while(t1<=86400);
do
{
t2+=n2;
ile_ciastek2+=1;
}
while(t2<=86400);

    float razem_ciastek;
    razem_ciastek=ile_ciastek1+ile_ciastek2;
    ile_paczek=razem_ciastek/paczka;
    cout<<ceil(ile_paczek)<<endl;break;
}
case 3:
{
    int n1, n2, n3, t1, t2, t3;
    cin>>n1>>n2>>n3;
    do
    {
    t1+=n1;
    ile_ciastek1+=1;
    }

    while(t1<=86400);

    do
    {
    t2+=n2;
    ile_ciastek2+=1;
    }

    while(t2<=86400);

    do
    {
    t3+=n3;
    ile_ciastek3+=1;
    }

    while(t3<=86400);

    float razem_ciastek;
    razem_ciastek=ile_ciastek2+ile_ciastek1+ile_ciastek3;
    cout<<razem_ciastek<<endl;
    ile_paczek=razem_ciastek/paczka;
    cout<<"ile paczk: "<<ile_paczek<<endl;
    cout<<"ile paczek:"<<ceil(ile_paczek)<<endl;break;
}

}
}
return 0;
}

         #include <iostream>

#include <math.h>

using namespace std;
float ile_paczek;
int ile_ciastek1, ile_ciastek2, ile_ciastek3;
int ile_osob,paczka, ile;
int main()
{ cin>>ile;
for(int i=1; i<=ile;i++)
{
cin>>ile_osob>>paczka;
switch(ile_osob)
{
case 2:
{
int n1, n2, t1, t2;
cin>>n1>>n2;
do
{
t1+=n1;
ile_ciastek1+=1;
}
while(t1<=86400);
do
{
t2+=n2;
ile_ciastek2+=1;
}
while(t2<=86400);

    float razem_ciastek;
    razem_ciastek=ile_ciastek1+ile_ciastek2;
    ile_paczek=razem_ciastek/paczka;
    cout<<ceil(ile_paczek)<<endl;break;
}
case 3:
{
    int n1, n2, n3, t1, t2, t3;
    cin>>n1>>n2>>n3;
    do
    {
    t1+=n1;
    ile_ciastek1+=1;
    }

    while(t1<=86400);

    do
    {
    t2+=n2;
    ile_ciastek2+=1;
    }

    while(t2<=86400);

    do
    {
    t3+=n3;
    ile_ciastek3+=1;
    }

    while(t3<=86400);

    float razem_ciastek;
    razem_ciastek=ile_ciastek2+ile_ciastek1+ile_ciastek3;
    cout<<razem_ciastek<<endl;
    ile_paczek=razem_ciastek/paczka;
    cout<<ceil(ile_paczek)<<endl;break;
}

}
}
return 0;
}

poprawilem kod, nie wiem czm to nie gralo ale na pewno ten i tak jest ladniejszy ale i tak nie zalicza mi popr odpowiedzi pomimo dobrych wynikow, pomocy !
#include
#include <math.h>

using namespace std;
float ile_paczek1,ile_ciastek1,paczka1;
float ile_paczek2,ile_ciastek2,paczka2;
int n[1],n2[2];
int ile_osob, ile;
int main()
{
cin>>ile;
for(int i=1; i<=ile;i++)
{
cin>>ile_osob;
switch(ile_osob)
{
case 2:
{
cin>>paczka1>>n[0]>>n[1];
for(int i=0;i<=1;i++)
ile_ciastek1+=86400/n[i];
ile_paczek1=ile_ciastek1/paczka1;break;
}
case 3:
{
cin>>paczka2>>n2[0]>>n2[1]>>n2[2];
for(int i=0;i<=2;i++)
{
ile_ciastek2+=86400/n2[i];
}
ile_paczek2=ile_ciastek2/paczka2;break;
}
}
}
cout<<ceil(ile_paczek1)<<endl;
cout<<ceil(ile_paczek2)<<endl;
return 0;
}

Nie jest dobrze. Co się dzieje gdy obżartuchów jest 5 albo 3625?

Test pokazujący problem
wejście
1
1 1
86000
prawidłowe wyjście
1

Lekko zmodyfikowałem kod i już daje poprawny wynik przy czasie jedzenia ciastka wynoszącym 86000 sekund, ale dalej daje błędny wynik według SPOJ.

W jakim sensie zły format? Muszę tego floata na coś zamienić?

Trudno - kawa na ławę. Nie wiem jak naprowadzić inaczej.
Dla danych z zadania wynikiem działania programu jest
82
a powinno być
8
2