Mai intai trebuie sa te autentifici.
Diferente pentru jc2023/solutii/omidamincinoasa intre reviziile #3 si #2
Nu exista diferente intre titluri.
Diferente intre continut:
h1. 'Solutia':jc2023/solutii/omidamincinoasa problemei 'Omida Mincinoasa':problema/omidamincinoasa
Pentruînceput, observăm că$C(n,i)·i^k^$înseamnăde fapt săalegem un subşir de lungime $i$ a mulţimii ${1,2,3,...,n}$,şi dupăaceea săalegem o tuplăde lungime $k$ din subşirul respectiv.În acest fel, numărăm toate perechile de tipul $(subşir,tuplă)$, dar acest lucru este echivalent cu a număra perechi de tipul $(tuplă, subşir)$. Observămîn continuare căpentru a alege un subşir care acoperăo tuplăde valori depinde doar de numărul de valori distincte $x$ din tuplă, iar numărul de moduri săalegem subşirul este $2^n-x^$. Astfel,dacăvom găsi un mod prin care săcalculăm numărul de tuple cu $x$ valori distincte, am rezolvat problema.
Pentru inceput, observam ca $C(n,i)·i^k^$ inseamna de fapt sa alegem un subsir de lungime $i$ a multimii ${1,2,3,...,n}$, si dupa aceea sa alegem o tupla de lungime $k$ din subsirul respectiv. In acest fel, numaram toate perechile de tipul $(subsir,tupla)$, dar acest lucru este echivalent cu a numara perechi de tipul $(tupla, subsir)$. Observam in continuare ca pentru a alege un subsir care acopera o tupla de valori depinde doar de numarul de valori distincte $x$ din tupla, iar numarul de moduri sa alegem subsirul este $2^n-x^$. Astfel daca vom gasi un mod prin care sa calculam numarul de tuple cu $x$ valori distincte, am rezolvat problema.
h2. Subtask 6: k ≤ 500
Putem folosi următoarea dinamicăpentru a număra tuple: $dp[i][j] = numărul de tuple de lungime i care conţin toate valorile din [1,j]$. Ca recurenţă, săspunem cătupla noastrăconţine $k > 1$ valori egale cu $j$, atunci $dp[i][j] += dp[i-k][j-1]·C(i,k)$.
Putem folosi urmatoarea dinamica pentru a numara tuple: $dp[i][j] = numarul de tuple de lungime i care contin toate valorile din [1,j]$. Ca recurenta, sa spunem ca tupla noastra contine $k > 1$ valori egale cu $j$, atunci $dp[i][j] += dp[i-k][j-1]·C(i,k)$.
Prin urmare, am rezolvat acest subtaskîn $O(k^3^)$.
Prin urmare, am rezolvat acest subtask in $O(k^3^)$.
O implementare bazatăpe aceastăidee poate fi văzută"aici":https://www.infoarena.ro/job_detail/3147762?action=view-source.
O implementare bazata pe aceasta idee poate fi vazuta "aici":https://www.infoarena.ro/job_detail/3147762?action=view-source.
h2. Subtask 7: k ≤ 5000
Observăm cădinamica de mai sus numărăfuncţii surjective definite pe ${1,2,3,...,k}$ cu valoriîn ${1,2,3,...,j}$. Numărarea acestor funcţii este un lucru cunoscut, o putem face prin diverse metode, soluţia oficialăse foloseşte de "numere Stirling de speta a 2-a":https://en.wikipedia.org/wiki/Stirling_numbers_of_the_second_kind, cu o complexitate finalăde $O(maxk^2^ + t·k)$.
Observam ca dinamica de mai sus numara functii surjective definite pe ${1,2,3,...,k}$ cu valori in ${1,2,3,...,j}$. Numararea acestor functii este un lucru cunoscut, o putem face prin diverse metode, solutia oficiala se foloseste de "numere Stirling de speta a 2-a":https://en.wikipedia.org/wiki/Stirling_numbers_of_the_second_kind, cu o complexitate finala de $O(maxk^2^ + t·k)$.
O implementare bazatăpe aceastăidee poate fi văzută"aici":https://www.infoarena.ro/job_detail/3147763?action=view-source.
O implementare bazata pe aceasta idee poate fi vazuta "aici":https://www.infoarena.ro/job_detail/3147763?action=view-source.