Revizia anterioară Revizia următoare
Fişierul intrare/ieşire: | countbst.in, countbst.out | Sursă | Lot Seniori Tulcea 2018, baraj 2 |
Autor | Marian Darius | Adăugată de | |
Timp execuţie pe test | 1.5 sec | Limită de memorie | 524288 kbytes |
Scorul tău | N/A | Dificultate | N/A |
Vezi solutiile trimise | Statistici
Countbst
Un arbore binar este un arbore cu rădăcină în care fiecare nod are maxim 2 fii. Un arbore binar de căutare (Binary Search Tree) este un arbore binar în care fiecare nod are asociată o valoare, iar valoarea unui nod este strict mai mare decât toate valorile din subarborele său stâng şi strict mai mică decât toate valorile din subarborele său drept. Un exemplu de arbore binar de căutare este cel din stânga iar unul greşit în dreapta (deoarece 9 se află în subarborele stâng al lui 5 şi 3).
Cerinţă
Cunoscând numerele naturale N, K şi un şir A1, A2, ...AK cu toate elementele numere naturale distincte nenule mai mici sau egale cu N, vi se cere să număraţi câţi arbori binari de căutare există cu N noduri având valorile asociate nodurilor 1, 2, ... N (în orice ordine validă), astfel încât şirul A1, A2, ...AK să formeze un lanţ în arbore în această ordine. De exemplu, pentru N=8, K=5, A=(6, 7, 5, 3, 4), arborele de mai sus din stânga este unul valid.
Date de intrare
Fişierul de intrare countbst.in va conţine pe prima linie un număr natural T (numărul de teste), urmat de T teste. Fiecare test va fi descris prin două linii:
● Pe prima linie se vor găsi două numere naturale N şi K separate printr-un spaţiu.
● Pe linia a doua se vor găsi cele K numere naturale nenule distincte A1, A2, ...AK separate şi urmate de un spaţiu
Date de ieşire
În fişierul de ieşire countbst.out va conţine răspunsurile pentru fiecare dintre cele T teste, câte unul pe linie: numărul de arbori binari de căutare ce conţin şirul de K numere ca lanţ, afişat modulo 1 000 000 007 în ordinea testelor din fişierul de intrare.
Restricţii
Problema va fi punctată în baza următoarelor sub-probleme:
Grupă de teste | Punctaj | Limită N | Limită K | Limită T |
---|---|---|---|---|
1 | 3 puncte | N ≤ 12 | k ≤ N | T ≤ 10 |
2 | 4 puncte | N ≤ 200 | k ≤ N | T ≤ 10 |
3 | 7 puncte | N ≤ 2.000 | k ≤ N | T ≤ 10 |
4 | 5 puncte | N ≤ 50 | ∑k ≤ 2.000 | T ≤ 2.000 |
5 | 6 puncte | N ≤ 200 | ∑k ≤ 2.000 | T ≤ 2.000 |
6 | 7 puncte | N ≤ 2.000 | ∑k ≤ 2.000 | T ≤ 2.000 |
7 | 8 puncte | N ≤ 500.000 | ∑k ≤ 2.000 | T ≤ 2.000 |
8,9,10 | 3*3p=9 puncte | N ≤ 2.000 | ∑k ≤ 200.000 | T ≤ 200.000 |
11 | 50 puncte | N ≤ 500.000 | ∑k ≤ 200.000 | T ≤ 200.000 |
12 | 1 punct | N ≤ 3.000.000 | ∑k ≤ 200.000 | T ≤ 200.000 |
Exemplu
countbst.in | countbst.out | Explicaţie |
---|---|---|
2 10 3 2 7 5 10 5 1 7 4 6 2 | 84 0 | Pentru primul test avem 84 arbori binari de căutare cu nodurile 1,2, … , 10 care conţin lanţul (2,7,5). Pentru al doilea test, nu există niciun arbore binar de căutare valid |