1 / 19
Oct 2004

Maximum rope length is 0.
The minimum amount of money in the piggy-bank is 60.

research.att.com/~njas/doc/graphs.html

  • created

    Oct '04
  • last reply

    Nov '14
  • 18

    replies

  • 1.4k

    views

  • 12

    users

  • 2

    links

What do u mean by the minimum amount of money 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 smile.

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 smile

3 years later

n (0 ≤ n ≤ 1 000 000 000) - nie dostaniesz przecież liczby ujemnej na wejściu, więc nie bardzo wiem po co to?

1 year later

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.

5 months later

-- 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).

Czemu "int maxi;" ? W innych miejscach masz double, może to to jest przyczyną błędu?

Bardzo trafna uwaga i ślicznie za nią dziękuję, ale to nadal nie to...

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!

4 years later

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 ?

7 months later

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.

2 months later

Suggested Topics

Topic Category Replies Views Activity
Off-topic 1 81 Apr 9

Want to read more? Browse other topics in Off-topic or view latest topics.