13 / 192
Nov 2015

Normalnie służy do tego fukcja ceil() z bilbioteki math ale w tym zadaniu bywają z nią problemy, więc mam coś takiego

if (ile%ciastka==0) ile=ile/ciastka;
    else ile=(ile/ciastka)+1;

ile - ile ciastek zjedli łącznie zawodnicy
ciastka - ile ciastek jest w pudełku.

ps %10 == 0 sprawdza czy ostatnią cyfrą jest zero, a nie czy liczba jest całkowita. Linijka c=c+(86400/temp);

i wszystko co nad nią wydaje mi się w porządku, popraw to co niżej

Nie wiem dlaczego nie wrzuca moich odpowiedzi ;p Musisz wyzerować "c" i "o"...najlepiej zrób ich deklaraję i inicjalizcję w pętli for... int c = 0, o=0...

Deklaracja zmiennych używanych tylko w pętli po za nią - bardzo niedobrze, bo zostają wartości z poprzedniego obiegu. Przeniosłem int N,M,temp,c=0,o=0; do pętli for (int i....) i mi zaliczyło. Swoją drogą zmienna o jest nieużywana, to pewnie jakaś pozostałość po wcześniej wersji.

ps jak tobie też zaliczy, to usuń kod z forum.

2 years later

błędem jest istnienie tej tablicy smile

int n[ile_test-1][ile_abom];

prawdopodobnie wynikający z głownie braku rozumienia co robisz

w efekcie masz o jeden wiersz tablicy za mało, i w ostatnim teście mażesz po pamięci poza tablicą, dla małych testów może nie mieć to znaczenia, dla dużych musi się źle skończyć

a przecież tablica dwuwymiarowa nie jest ci potrzebna (a i tak kolejne przewymiarowanie zamazuje poprzednie dane), a oczywistym jest, że niepotrzebna jest jakakolwiek tablica

generalną zasadą jest używanie tablic statycznych o maksymalnym rozmiarze potrzebnym do rozwiązania problemu (oczywiście o ile to możliwe)

4 months later

1
1 1
86500

Poza tym, możesz też pomysleć jak a) zrobić to bez tablic (zauważ, że wartości, które tam wczytujesz potrzebne Ci są właściwie tylko w jednym momencie) i b) jak zrobić to efektywniej (to dodawanie po 1 zjedzonym czy po 1 pudełku jest niezbyt piękne - da się sprawdzić np. liczbę zjedzonych przez jednego obżartucha jednym dzieleniem).

3 months later

Teraz wczytywanie jest wystarczająco szybkie. Wystarczy teraz, że wyeliminujesz tablicę i będzie AC.
Niepotrzebnie też tworzysz warunki typu: "if(liczbaUczestnikow>0 && liczbaUczestnikow<=10000 && paczkaCiastek>0 && paczkaCiastek<=1000000000)" - to autor zadania deklaruje, że testy są odpowiednio dopasowane do tych warunków, Ty tego nie musisz potwierdzać. Ba! Twój kod powinien również dawać dobre wyniki jeśli nie wszystkie z tych warunków są spełnione (w rozsądnych granicach) na wypadek gdyby się jednak autor pomylił lub zmienił testy.

5 months later
8 days later

Hej, Pierwszy raz rozwiązuje zadanie na SPOJ i juz pierwsze problemy. Gdzie ja mam błąd w kodzie? U mnie wszystko dobrze kompiluje, chyba wszystkie przypadki założyłam, ale może tutaj jest cos inaczej odczytywane. Błagam o pomoc, ledwo zaczęłam, a juz jestem zniechęcona:(

for(int i=0; i<os;i++)
{c[i]=floor(86400/t[i]);
suma+=c[i];
}
suma/=szt;
cout<<ceil(suma)<<endl;

return 0;

}

To zadanie nie współpracuje z ceil-em (sprawdziłem na moim zatwierdzonym kodzie), będziesz musiał if-ować. Pewnie jakiś błąd zaokrąglenia z liczbami zmiennoprzecinkowymi

Ok, dzięki, to dobrze wiedzie, że chyba dobrze rozwiązałam, ale tak jak mówisz, przerobie program. Dzięki serdeczne:)

Zapomniałem wspomnieć, usuń kod z forum jak już ci zacznie działać

Cześć proszę Was o pomoc.
Moje rozwiązanie wygląda tak:

#include <iostream>
#include <math.h>
using namespace std;

int main(){
	long double calosc=0;
	int a;
	long long int N;
	long long int M;
	long double wynik;
	cin >> a;
	for (int i = 0; i < a; i++) {
		cin >> N >> M;
		int *tablica = new int[N];
		for (int j = 0; j < N; j++) {
			cin >> tablica[j];
			calosc += floor((24*60*60) / tablica[j]);
		}
		wynik = calosc / M;
		cout << ceil(wynik);
		calosc = 0;
	}
	return 0;
}

SPOJ wyświetla mi błędną odpowiedź. Nie wiem co jest nie tak, przy przykładowych danych jest ok.

Nie nie jest ok, bo mi wyświetla 82 przy przykładowych danych. Wczytuj wejście z pliku albo testuj np na ideone, wtedy będziesz widział że zapomniałeś o << "\n". Poza tym jak już pisałem wyżej to zadanie nie współpracuje z ceil-em.

ps na chwilę obecną dodawanie kodu na tym forum leży i kwiczy, lepiej wkej na ideone.com i daj tu linka.