Forum Informatyka UJ forum Strona Główna Informatyka UJ forum
Rocznik 2005 - czyli najlepsze forum w sieci
 
 FAQFAQ   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy   GalerieGalerie   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Zadanie F : Kostki
Idź do strony Poprzedni  1, 2
 
Napisz nowy temat   Odpowiedz do tematu    Forum Informatyka UJ forum Strona Główna -> Archiwum / 1 rok / 2 i 3 semestr - Algorytmy i Struktury Danych
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
trywialna
pijak



Dołączył: 12 Mar 2006
Posty: 257
Przeczytał: 0 tematów

Skąd: z kontowni:)

PostWysłany: Sob 23:13, 28 Paź 2006    Temat postu:

Głupie zadanie, przy czyszczeniu wyszłam poza zakres tablicy i ANS:/ dzieki Spectro :wink:
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Spectro
Mistrz grilla



Dołączył: 09 Mar 2006
Posty: 2306
Przeczytał: 0 tematów

Skąd: Kurdwanów

PostWysłany: Sob 23:31, 28 Paź 2006    Temat postu:

Ponieważ to nie pierwszy przypadek problemu z zerowaniem tablicy, to polecam funkcję:
Kod:
void *memset (void *buffer, int c, size_t num);

z biblioteki cstring (lub jak kto woli: string.h). Ustawia ona pierwszych num bajtów tablicy buffer na wartość c. Ponoć jest bardzo szybka ;) . Zerowanie tablicy tab można więc wykonać w następujący sposób:
Kod:
memset(tab, 0, sizeof(tab));
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Rogal
Zjeb z kaszanką



Dołączył: 13 Mar 2006
Posty: 1745
Przeczytał: 0 tematów

Skąd: koło podbiegunowe

PostWysłany: Nie 10:40, 29 Paź 2006    Temat postu:

Spectro: Jak piszesz takie rzeczy, to napisałbyś to już dokładniej :D

Dla całkowitych liczb większych niż 1-bajtowe ustawianie memsetem działa tylko w przypadku wartości 0 i -1. Dzieje się tak, ponieważ liczby są ustawiane nie po całości tylko po 1 bajcie, i jeślibyśmy np. chcieli ustawić liczbę int (4 bajty) przez memset na 1, to dostaniemy coś takiego
Kod:
00000001000000010000000100000001
- czyli wcale nie reprezentację jedynki. Memset po prostu ustawił każdy z bajtów tej liczby na 1, ale to wcale nie oznacza, że cała liczba jest równa 1. Natomiast faktycznie działa to dla wartości 0 (same zera) oraz -1 (same jedynki).

Nie jestem pewny jak działa to dla liczb zmiennoprzecinkowych, tj. jakie wartości można przez memset ustawić. Należy to sobie sprawdzić samemu :D
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Spectro
Mistrz grilla



Dołączył: 09 Mar 2006
Posty: 2306
Przeczytał: 0 tematów

Skąd: Kurdwanów

PostWysłany: Nie 11:04, 29 Paź 2006    Temat postu:

Rogal napisał:
Spectro: Jak piszesz takie rzeczy, to napisałbyś to już dokładniej

No przecież napisałem, że bajtów a nie elementów ;) . Nieprzypadkowo ta funkcja znajduje się w cstringu - w końcu każdy znak w stringu to właśnie 1 bajt. Ustawianie 0 dla zmiennoprzecinkowych działa ok, dla innych wartości nie próbowałem.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Cupek
pijak



Dołączył: 07 Kwi 2006
Posty: 34
Przeczytał: 0 tematów

Skąd: DG/Racławicka

PostWysłany: Czw 2:43, 02 Lis 2006    Temat postu:

- 1 godzina na znalezienie bledu ze sie wczytuje do &x a nie x
- 2 godziny na znalezienie bledu ze short inta sie nie czyta przez %d
- jeszcze troche na obczajenie bledu przy zmianie wiersza w petli
- OK na Atenie - bezcenny :D

Sa rzeczy ktorych nie mozna kupic, za wszystkie inne zaplacisz bezsensowna praca. :?
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
liffe
pijak



Dołączył: 16 Paź 2006
Posty: 78
Przeczytał: 0 tematów

Skąd: z daleka

PostWysłany: Czw 7:01, 02 Lis 2006    Temat postu:

kg86 napisał:
np:
n = 4
stan po 2 ruchach na poszczegolnych kostkach:
1 kostka:
- 1 sciana - p1
- 2 sciany - p2
- 3 sciany - p3
2 kostka:
- 1 sciana - p4
- 2 sciany - p5
- 3 sciany - p6

wiec conajmniej 4 sciany moga wypasc z prawdopodobienstwem:
P = p1 * p6 + p2 * (p5 + p6) + p3 * (p4 + p5 + p6)
czy takie rozumowanie jest poprawne?


A czy nie mógł by tego ktoś bardziej wytłumaczyć, bo stanąłem na tym zadaniu i nie mogę przebrnąć? Jak, naprzykład, wyliczałoby się w danym przypadku prawdopodobieństwo zobaczenia 5 scian? :? i skąd w ogóle powyższa formułka na "P" się wzięła. Z góry wielkie dzięki.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Spectro
Mistrz grilla



Dołączył: 09 Mar 2006
Posty: 2306
Przeczytał: 0 tematów

Skąd: Kurdwanów

PostWysłany: Czw 9:53, 02 Lis 2006    Temat postu:

@liffe:
dla 5 ścian:
P = p2 * p6 + p3 * (p5 + p6)

Po prostu wyliczamy prawdopodobieństwa w kolejnym rzucie dla dokładnie n ścian, n+1 ścian, n+2 ścian, itd., a następnie je sumujemy. Dla n=4 liczyliśmy prawdopodobieństwo wypadnięcia dokładnie 4 ścian (p1 * p6 + p2 * p5 + p3 * p4), 5 ścian (p2 * p6 + p3 * p5) i 6 ścian (p3 * p6). Ten wzór ładnie przekształcamy i wychodzi to, co napisał kg86. Czasami trzeba przyjąć, że cząstkowe prawdopodobieństwo wynosi zero (za mało rzutów dla określonej ilości ścian lub za mała ilość ścian kostki). W przykładzie kg86 akurat p3 = 0 i p6 = 0, ale pewnie chodziło mu stan po 3 rzutach kostką, wtedy te prawdopodobieństwa są > 0 ;) .
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
liffe
pijak



Dołączył: 16 Paź 2006
Posty: 78
Przeczytał: 0 tematów

Skąd: z daleka

PostWysłany: Czw 11:38, 02 Lis 2006    Temat postu:

Ja to chyba jestem głąbem, skoro do mnie matematyka nie dociera (zresztą nigdy nie lubiłem prawdopodobieństw), a siedzę z tym już ponad dwie godziny. Wszystko jedno nie rozumiem jak to ma działać.
Z poprzedniego postu :
P6 = p3*p6
P5 = P6 + (p2*p6 + p3*p5) = p2*p6 + p3*(p5+p6)
P4 = P5 + (p1*p6 + p2*p5 + p3*p4)=p1*p6 + p2*(p5+p6) + p3*(p4+p5+p6)
Wtedy:
P3 = ??? <może P3 = P4 + (p1*p5+p4*p2)> :?
P2 = ??? <moze P2 = P3 + (p1*p4) = 1 (no bo inaczej sie nie da)> :?
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Spectro
Mistrz grilla



Dołączył: 09 Mar 2006
Posty: 2306
Przeczytał: 0 tematów

Skąd: Kurdwanów

PostWysłany: Czw 12:32, 02 Lis 2006    Temat postu:

@liffe:
Zgadza się :) . Prawdopodobieństwo wypadnięcia liczby ścian mniejszej niż 3 na obu kostkach już po pierwszym rzucie wynosi 1. A te iloczyny rzeczywiście się sumują do jedynki.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
liffe
pijak



Dołączył: 16 Paź 2006
Posty: 78
Przeczytał: 0 tematów

Skąd: z daleka

PostWysłany: Czw 13:01, 02 Lis 2006    Temat postu:

No teraz mam nadzieję, że się uda.
Na razie nie chce mi wczytywać doubla z wejscia, nie moge sprawdzic tego, co napisałem :-)
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
liffe
pijak



Dołączył: 16 Paź 2006
Posty: 78
Przeczytał: 0 tematów

Skąd: z daleka

PostWysłany: Czw 13:28, 02 Lis 2006    Temat postu:

RTE hmmmmmmm
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Skrobocik
[SKROBORANGA]



Dołączył: 29 Lis 2005
Posty: 2958
Przeczytał: 0 tematów

Skąd: Skarżysko , Kraków

PostWysłany: Czw 19:08, 02 Lis 2006    Temat postu:

Napiszę Wam fazę, jaka mnie spotkała z tym zadaniem:
siedziałem nad nim długo, przyznaję, bo nie mogłem wykminić jak zrobić to na trzech wymiarach. Dopiero jak przeczytałem na forum ten post Konrada, to wymysliłem sobie, że jednak zrobię oddzielnie dla każdej kostki, a potem przemnażanie po macierzach. Wykminiłem, napisałem, potestowałem i siedziałem dwa dni szukając błędów, gdyż dla danych wejściowych:
Kod:
12
100 100 200 0.999999999999
100 100 200 0.99
100 100 150 0.999999999999
100 100 150 0.99
100 100 199 0.999999999999
100 100 199 0.99
100 100 198 0.999999999999
100 100 198 0.99
100 100 197 0.999999999999
100 100 197 0.99
100 100 190 0.999999999999
100 100 190 0.99

dawało mi odpowiedzi:
Kod:
3265
985
221
160
1859
716
1376
607
1126
543
598
366

, a exec zamieszczony w tym temacie właśnie przez Konrada dawał:
Kod:
3276
985
221
160
1863
716
1377
607
1127
543
599
366


Dla tych bardziej szczegółowych prawdopodobieństw się sypało :?

Szukałem błędu i z bezsilności postanowiłem zasubmitować, żeby móc zagadnąć na forum TCS'u. No i psikus, bo przeszło ;)
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Madras
Omylny Admin



Dołączył: 09 Lis 2005
Posty: 2021
Przeczytał: 0 tematów

Skąd: Z Pokoju :]

PostWysłany: Czw 20:27, 02 Lis 2006    Temat postu:

Bo to są najbardziej skrajne, i najbardziej wredne dane, dla których wyniki mogą się różnić w zależności od zastosowanego algorytmu - ze względu na przybliżenia.

Uff, nie ma to jak udany submicik. A bałem się, że będzie TLE, bo mój algorytm był maxymalnie kiepski O( wynik * ( sc1 * sc1 + sc2 ) ) (należy zwrócić uwagę na sc1*sc1, dla danych 100 2 wykonywał zagnieżdżone 10k operacji, a nie 200 ;>). Co prawda wiedziałem, jak zrobić O( wynik * ( sc1 + sc2 ) ), ale jestem naprawdę leniwym człowiekiem :>.


Ostatnio zmieniony przez Madras dnia Pią 16:36, 03 Lis 2006, w całości zmieniany 1 raz
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
liffe
pijak



Dołączył: 16 Paź 2006
Posty: 78
Przeczytał: 0 tematów

Skąd: z daleka

PostWysłany: Pią 11:56, 03 Lis 2006    Temat postu:

RTE => TLE => BLE-BLE-BLE... wkurza. Czy moglby ktos zobaczyc w kod, co robie nie tak, bo mam TLE. Ktos mowil o wyliczaniu prawdopodobienstwa w jednej petli, a nie w dwoch, a ja nie wiem jak to zalatwic :?
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Sobek
pijak



Dołączył: 06 Lut 2006
Posty: 323
Przeczytał: 0 tematów

Skąd: Lubaczów / ds16

PostWysłany: Pią 13:15, 03 Lis 2006    Temat postu:

Podrzuć na priva.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
kg86
zielony żul



Dołączył: 22 Gru 2005
Posty: 1194
Przeczytał: 0 tematów

Skąd: pochodze?

PostWysłany: Pią 15:39, 03 Lis 2006    Temat postu:

@liffe - a robisz to tym sposobem z liczeniem prawdopodobienstwa odzielnie dla dwoch kostek? :) ja tam zrobilem z obliczaniem tej kombinacji prawdopodobienstwa w 2 petlach [n^4? :D] a smigalo az milo :) nie mialem jakis specjalnych optymalizacji - zaczynalem obliczac to prawdopodobienstwo od momentu wykonania minimalnej liczby ruchow, kiedy przekroczyc wartosc 0 :) np. jesli mamy 2 kostki 100-scienne, a musimy obliczyc prawdopodobienstwo dla 200 scian... to wiadomo, ze dopiero po 100 rzutach obiema kostkami prawdopodobienstwo wyrzucenia 200 scian w sumie przekroczy 0 :)
tak samo nie warto podczas obliczania tej kombinacji isc po wszystkich polach, tzn.
for (i = 1; i <= liczba_wyrzuconych_scian_na_pierwszej_kostce; i++)
for(j = 1; j <= liczba_wyrzuconych_scian_na_drugiej_kostce; j++)
if(i+j >= oczekiwana_liczba_scian) suma += kostka1[i]*kostka2[j];

tylko najpierw obliczyc ograniczenia dla tych petli, aby zawsze i+j dawalo conajmniej oczekiwana liczbe scian :)
ponadto warto najpierw zsumowac wszystkie wartosci po j w kostka2[j], a dopiero potem pomnozyc to przez kostka1[i] :)
i teraz mozna zauwazyc, ze nie musimy w kazdej petli i, od nowa sumowac tego wszystkiego po j, bo w kazdej kolejnej petli i, suma bedzie roznila sie o jeden wyraz, takze w ten sposob mozna zrezygnowac z petli j, zastepujac ja doliczaniem do pewnej sumy kolejnego wyrazu z kostka2...
nie wydaje mi sie to zbyt zrozumiale, wiec przyklad:
kostka1[i] - prawdopodobienstwo wyrzucenia i scian na kostce 1
kostka2[j] - prawdopodobienstwo wyrzucenia j scian na kostce 2
niech kostka1 bedzie 4-wymariowa, a kostka2 5-wymiarowa :)
chcemy policzyc prawdopodienstwo dla 7 scian, jest ono rowne:
kostka1[2] * kostka2[5] + kostka1[3] * (kostka2[4] + kostka2[5]) + kostka1[4] * (kostka2[3] + kostka2[4] + kostka2[5])
wiec, z kazdym zwiekszeniem indeksu i, dla kostka1[i], suma po j, dla kostka2[j] przez ktora mnozymy kostka1[i], zwieksza sie o jeden wyraz :) wiec petle obliczajaca sume po j, mozna zastapic dodawaniem jednego wyrazu do sumy po j, obliczonej w poprzedniej petli :) nie umiem tego prosciej wyjasnic :P
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Informatyka UJ forum Strona Główna -> Archiwum / 1 rok / 2 i 3 semestr - Algorytmy i Struktury Danych Wszystkie czasy w strefie EET (Europa)
Idź do strony Poprzedni  1, 2
Strona 2 z 2

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach

fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
Regulamin