Maximum rope length is 0.
The minimum amount of money in the piggy-bank is 60.
created
last reply
- 18
replies
- 1.4k
views
- 12
users
- 2
links
Maximum rope length is 0.
The minimum amount of money in the piggy-bank is 60.
Not quite. Both forms ("maximum" and "maximal") can be used as adjectives, however the form "maximal" clearly implies that we are speaking about an upper bound (which in discrete mathematics is nearly always the same as one of values of largest possible size), while the form "maximum" is less formal, and may even be used in the sense "largest". To make matters worse, some authors of recent papers (in graph theory) seem to use the word "largest" in the sense "maximal", which makes the muddle complete .
Below are the results of a google term frequency search that I made for complete phrases 1.5 years ago (I guess they are not all that out of date).
a maximum independent set - 904x clique - 900x
the maximum independent set - 1120x clique - 2270x
a maximal independent set - 904x clique - 840x
the maximal independent set - 911x clique - 568x
a largest independent set - 115x clique - 142x
the largest independent set - 397x clique - 1260x
snowman;
Sorry, man, but it's not what you think and has nothing in common with Piggy Bank.
Adrian Kosowski;
I think the stats just says that for the best part of people on the Globe English is not their native language. Btw, my mastering of English is equal near to nothing. I just manage to keep in memory a huge store of English words and idioms.
As to the subj I would be pretty happy even if SPOJ used just min/max instead of their full forms
Program aa;
var
a,b,c : real;
i,t : integer;
z: array[1..30] of integer;
begin
i:=0;
repeat
begin
i:=i +1;
read(a,b,c);
if ((a+b)>c) and ((b+c)>a) and ((c+a)>b) then
z[i]:= 1
else
z[i]:= 0;
end;
until eof;
for t:=1 to i do
writeln(z[t]);
end.
Witam, mam pytanie dlaczego programu napisanego w ten sposób SPOJ mi nie akceptuje? Myślę że to na pewno coś z pętla repeat. Nie jestem pewny czy to dobry sposób na ta "pewna ilość danych" z polecania. Wyskakuje błąd NZEC. Podobny problem mam też w innych zadaniach z takim poleceniem.
A i mam jeszcze jedno pytanie, jeśli w poleceniu jest że podano n liczb oddzielając je spacja, to jak coś takiego zaprogramować w pascalu?
Może mała tablica:
z: array[1..30] of integer;
Skąd wiesz, że tych danych będzie max 30? A może będzie ich 1000?
SPOJ zaakceptuje też coś takiego:
- bierzesz porcję danych (np. a, b, c).
- wykonujesz na nich obliczenia.
- wypisujesz wynik.
- bierzesz następną porcję - i tak aż do końca pliku (eof).
Co do drugiego pytania - poniżej pobieranie n liczb integer:
var
I, N: Integer;
Foo: array[1..10000] of Integer; //jeżeli np. wiadomo, że n <= 10000
begin
Read(N); //ile mamy pobrać liczb
for I := 1 to N do Read(Foo[I]); //w pętli pobieramy kolejne liczby
end.
Spróbowałem zwiększyć tablice, ale w dalszym ciągu mam błąd NZEC...
A co do drugiej zaproponowanej metody to napisałem coś takiego, ale też wyskakuje NZEC. Nie mam zielonego pojęcia co może być źle w tym kodzie.
Program aa;
var
a,b,c : real;
begin
repeat
begin
read(a,b,c);
if ((a+b)>c) and ((b+c)>a) and ((c+a)>b) then
writeln('1')
else
writeln('0');
end;
until eof;
end.
Pascal może wyrzucić NZEC (non-zero exit code), gdy wystąpi runtime error. Wtedy Pascal wyrzuca exit code np. 123, kiedy prawidłowym jest 0.
Tutaj występuje runtime error 106. Dlaczego?
a) SPOJ do sprawdzania używa pliku, na który przekierowane jest wejście.
b) Na końcu pliku do konsoli wpada znak końca pliku. A tymczasem twój program czeka na jakieś zmienne typu Real...
Zmodyfikuj odpowiednio procedurę.
Hint 1: Eof wyrzuci true, gdy znak końca pliku zostanie już napotkany.
Hint 2: Typ Real jest dość wolny. Zamień np. na Double.
-- kod usunięty --
Oto moja implementacja rozwiązania i sędzia wykrzykuje WA - błędną odpowiedź... Nie mam pojęcia czemu, bo dla dowolnych zestawów danych działa poprawnie. Algorytm najsampierw sprawdza czy przypadkiem któryś z odcinków nie jest ujemny, potem ustala który z boków jest największy (na wypadek gdyby nie były posortowane) i to on jest sprawdzany (czy jest większy lub równy od sumy dwóch pozostałych). Zakładam, że z marszu należy odrzucić przypadki, gdy dane są ujemne oraz że przypadek, w którym najdłuższy bok jest równy sumie 2 pozostałych to nadal trójkąt. Prosiłbym o jakąś poradę, co jest nie tak (może też jakoś dane źle pobieram).
Sprawdzałem dla obu przypadków. 2 2 4 daje odcinek o długości 4 i teraz pytanie czy można to traktować jako trójkąt. Są 2 szkoły a twórca zadania nie podał w którą wierzy... Tak czy inaczej, nie działa ani w przypadku, gdy zwracam dla takich wartości 0, ani gdy zwracam 1. Poza tym wspominałem, jak rozpatruję taki przypadek.
Nie ma "dwóch szkół", które wyznają różne odpowiedzi. Jest tylko jedna poprawna:
tiny.pl/hq85x12
To tak jakby byłby dwie szkoły: jedna by mówiła, że 1 jest liczbą pierwszą, a druga, że nie jest. A odpowiedź jest tylko jedna.
No ale mniejsza. Popraw program, żeby dla "1.1 2.2 1.1" dawał "0", a nie "1" i wklej kod, to poszukam dalej błędnych odp.
Co do samego dylematu egzystencjalnego na temat trójkąta: Nierówność trójkąta to a<=b+c a nie a
Znalazłem wreszcie błąd i ze wstydem muszę przyznać, że winą jest tylko bezkres mojego braku wyobraźni... Wstydzę się na tyle, że nie podam bezpośrednio jaki to błąd, ale dla pokory zostawię kod z błędem i dodam nawet wskazówkę dla dociekliwych: Wystarczy minuta debugowania żeby wiedzieć czemu mi wstyd.
Niniejszym dziękuję użytkownikowi kokosek, bo de facto to On go dla mnie znalazł. Dzięki!
po pierwsze przeczytaj regulamin działu, w szczególności punkt dotyczący zakładania nowego wątku
po drugie poszukaj i przeczytaj wątek dotyczący tego zadania
a potem sprawdź, jak wstawić kod, aby dał się czytać
a co do zadania - odpowiedz (sobie) na następujące pytania:
1) kiedy skończy się pętla
while(cin>>bok1 >>bok2 >>bok3)
{
...
}
2) czy w zadaniu była jakakolwiek informacja o liczbie testów ?, i dlaczego przyjąłeś, że jest ich <= 100 ?
3) po co tablicować wynik, skoro można go od razu wypisać ?
4) czy nie można zmniejszyć liczby rozpatrywanych przypadków ?
Wydaje mi się, że trochę, źle sformułowałeś pytanie.
W skrócie: instrukcje w bloku while not eof przetwarzane są dopóki eof ==> false
eof [End Of File -znacznik końca pliku] powinien zmienić wartość na true "prz okazji" wczytywania ostatniej porcji danych. I na ogół tak się dzieje, gdy znacznik ten jest umieszczony za ostatnią daną. Problem zaczyna się, gdy na końcu pliku są jeszcze jakieś białe znaki, spacje, tabulatory, czy pusta/e linie a nie ma już danych. Wtedy można np zastosować metodę opisaną na końcu we wspominianym wcześniej tutorialu.
Zachęcam i proponuję poczytać dodatkowo o eof w podręczniku lub w necie [np wikopedia] - tam na pewno jest to szerzej i dokładniej opisane.
Topic | Category | Replies | Views | Activity |
---|---|---|---|---|
Hosting a competition on SPOJ | Off-topic | 1 | 81 | Apr 9 |