Matei-Dan Epure (motty)

motty
Vezi solutiile trimise
NumeMatei-Dan Epure
Contmotty
Rating624
StatutHelper
Forumtrimite mesaj privat, vezi activitate
Atenţie! Aceasta este o versiune veche a paginii, scrisă la 2010-03-25 19:18:43.
Revizia anterioară   Revizia următoare  

Despre mine

  • Sunt elev in clasa a 10-a la Colegiul National de Informatica "Tudor Vianu"
  • Am inceput informatica in octombrie 2008 (clasa a 9-a)
  • In God we Trust!
  • Gibson rulez \m/!

Distinctii primite

  • Mentiune la ONI 2009 (clasa a 9-a)
  • Premiul I la Concursul de Informatica "Urmasii lui Moisil" Iasi - 2009

Profesori

rapidu36Victor Manz rapidu36
filipbFilip Cristian Buruiana filipb
andrei.12Andrei Parvu andrei.12

Prieteni pe infoarena

gabitzish1Gabriel Bitis gabitzish1
gcosminGheorghe Cosmin gcosmin
cosmin79Carabet Cosmin Andrei cosmin79
iraIrina Stanescu ira
ilincaSorescu Ilinca ilinca
funkydvdIancu David Traian funkydvd
punkistBarbulescu Dan punkist
AndreyPAndrei Poenaru AndreyP
tvladTataranu Vlad tvlad
ciprianfFarcasanu Alexandru Ciprian ciprianf
drag0s93Mandu Dragos drag0s93
AndreiDumaAndrei Duma AndreiDuma
IoannaPandele Ioana Ioanna
andrei-alphaAndrei-Bogdan Antonescu andrei-alpha
hadesgamesTache Alexandru hadesgames
andreisfrentSfrent Andrei andreisfrent
NemultumituMatei Ionita Nemultumitu

Numerele lui Stirling

Se numesc :

Numerele lui Stirling de speta I :

s(n,m) = numarul de permutari de ordin n cu exact m cicluri.

Numerele lui Stirling de speta II :

S(n,m) = numarul de partitionari ale unei submultimi de n elemente in m submultimi nevide.

Cerinta

Pentru n si m date, sa se calculeze una dintre cele 2 functii, s(n,m) sau S(n,m).

Date de intrare

Prima linie a fisierului de intrare stirling.in contine numarul de teste T. Urmatoarele T linii contin cate un set de 3 numere, s, n si m. Variabila s poate lua valorile 1 si 2, avand semnificatia ca se doreste rezultatul functiei de speta I sau speta II.

Date de iesire

Pentru fiecare test, afisati in fisierul stirling.out rezultatul functiilor modulo 98999, fiecare pe cate un rand.

Restrictii

  • 0 < T < 1001
  • 0 <= n,m <= 200

Exemplu

Indicatii de rezolvare

Backtracking:
Ideea "naiva" de rezolvare a acestei probleme presupune generarea tuturor permutarilor de ordin n si calcularea numarului de cicluri a fiecareia dintre acestea. Aceasta rezolvare are complexitatea exponentiala si va obtine 10 puncte. O astfel de sursa poate fi gasita aici.

http://en.wikipedia.org/wiki/Stirling_numbers_of_the_first_kind
http://en.wikipedia.org/wiki/Stirling_numbers_of_the_second_kind
http://mathworld.wolfram.com/StirlingNumberoftheFirstKind.html
http://mathworld.wolfram.com/StirlingNumberoftheSecondKind.html

In urma unei demonstratii matematice, luandu-se in considerare relatiile prezentate pe cele doua link-uri de mai devreme, rezulta recurentele :

s(n,m) = s(n-1,m-1) + n*s(n-1,m)

S(n,m) = S(n-1,m-1) + k*S(n-1,m)

Recursivitate:

Pentru un singur test, o metoda optima de rezolvare este cea care foloseste o functie recursiva si calculeaza la fiecare pas elementele necesare recurentei pasului actual. Totusi, daca nu este folosita memorizarea, la un numar mai mare de teste, aceasta rezolvare va iesi din timp. Folosind aceasta metoda veti obtine 50 de puncte, o sursa ce foloseste aceasta metoda poate fi gasita aici.

Programare dinamica:

Solutia optima a acestei probleme este cea care foloseste metoda programarii dinamice. astfel vor fi precalculate 2 matrici s[N][M] si S[N][M] cu semnificatia s[i][j]=s(i,j) si S[i][j]=S(i,j). Folosindu-se aceasta metoda, la fiecare test vom raspunde in o(1) la intrebare si deci complexitatea va fi o(N*M + T). Aceasta rezolvare obtine 100 de puncte si o sursa ce o foloseste poate fi gasita aici.