|
Informatyka UJ forum Rocznik 2005 - czyli najlepsze forum w sieci
|
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:)
|
Wysł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 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
|
Wysł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 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
|
Wysł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 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
|
Wysł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 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
|
Wysł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 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
|
Wysł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 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
|
Wysł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 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
|
Wysł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 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
|
Wysł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 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
|
Wysł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 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
|
Wysłany: Czw 13:28, 02 Lis 2006 Temat postu: |
|
|
RTE hmmmmmmm
|
|
Powrót do góry |
|
|
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
|
Wysł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 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 :]
|
Wysł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 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
|
Wysł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 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
|
Wysłany: Pią 13:15, 03 Lis 2006 Temat postu: |
|
|
Podrzuć na priva.
|
|
Powrót do góry |
|
|
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?
|
Wysł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 |
|
|
|
|
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
|