Hulkade kahendpuu | 프로그래밍의 벗 PivotOJ
PivotOJ

Hulkade kahendpuu

시간 제한: 1000ms메모리 제한: 1024MB출처: EIO 2015-16 openBOJ 7172
이 문제는 본문 이미지 일부가 표시되지 않습니다. 텍스트만으로 풀이가 어려울 수 있습니다.

문제

Hulkade kahendpuu erineb tavalisest kahendotsingu puust selle poolest, et puu igas tipus võib olla mitu elementi. Samas kehtib kahendotsingu puu põhitingimuse üldistus: mistahes tipu vasaku alampuu kõik elemendid peavad olema väiksemad ja parema alampuu kõik elemendid suuremad kõigist tipu enda elementidest.

Seega saab hulkade kahendpuus elementi otsida samamoodi kui tavalises kahendotsingu puus. Muuhulgas saab igas tipus otsustada, kas otsitav element peab olema selles tipus või kas tuleks otsingut jätkata vasakus või paremas alampuus. Kui loeme selle otsustamise üheks operatsiooniks, on mistahes elementi sisaldava tipu leidmiseks vaja täpselt nii palju operatsioone, kui palju on tasemeid puu juurest selle elemendi asukohani.

Tippude mäluhalduse iseärastuste tõttu on puu ühes tipus olla võivate elementide maksimaalne arv erinevatel tasemetel erinev. Täpsemalt, kui juurtipu taseme number on 11, siis on tasemel number ii ühes tipus olevate elementide maksimaalne arv mim_i määratud seostega

mi={Mkui i=1,max(1,mi1D((i1)K)+1))kui i>1,m_i = \begin{cases}M & \text{kui } i = 1, \\ \max{(1, m_{i-1} - D_{((i-1) \bmod K) + 1)})} & \text{kui } i > 1,\end{cases}

kus MM, KK ja DjD_j on antud täisarvud ning (i1)K(i-1) \bmod K on arvu i1i-1 arvuga KK jagamisel tekkiv jääk. Näiteks kui M=4M = 4, K=2K = 2 ja D1=1D_1 = 1, D2=2D_2 = 2, siis võib puu juurtipus olla maksimaalselt m1=M=4m_1 = M = 4, tema vahetutes alluvates kummaski maksimaalselt m2=m1D1=41=3m_2 = m_1 - D_1 = 4 - 1 = 3, nende vahetutes alluvates igaühes m3=m2D2=32=1m_3 = m_2 - D_2 = 3 - 2 = 1 ja kõigis järgmistes kihtides igas tipus maksimaaslet mi=max(1,)=1m_i = \max{(1, \ldots)} = 1 element.

Lisaks on teada, et puu kasutamisel otsitakse erinevaid elemente sellest erinevate tõenäosustega ja seega ei tarvitse balansseeritud puu anda parimat keskmist päringule vastamise aega. Näiteks kui ülekaalukalt kõige sagedamini otsitakse minimaalset elementi, on kasulik panna see puu juurtippu ja siis peab kogu vasak alampuu jääma tuhjaks.

Ülesanne on leida keskmine ühe elemendi otsimiseks vajalik operatsioonide arv antud elementide hulga ja pärigute tõenäosuste jaoks optimaalse kujuga hulkade kahendpuus.

입력

Tekstifaili esimesel real on kolm täisarvu: hulga elementide arv NN (1N1001 \le N \le 100) ning MM (1MN1 \le M \le N) ja KK (1KN1 \le K \le N). Järgmisel K real on igaühel üks täisarv: real j+1j + 1 on DjD_j väärtus (0DjM0 \le D_j \le M). Faili viimasel real on NN reaalarvu PiP_i (0Pi10 \le P_i \le 1; i=1NPi=1\sum_{i=1}^{N}{P_i} = 1): elementide otsimise tõenäosused. Tõenäosused on järjestatud elementide väärtuste järgi (esimene tõenäosus vastab vähimale elemendile). Pange tähele, et elementide väärtused ei ole lahenduse jaoks olulised; võib eeldada, et nad on kõik erinevad.

출력

Tekstifaili ainsale reale väljasta uks reaalarv, ühele otsingule kuluv keskmine operatsioonide arv optimaalse kujuga puus. Väljastatud vastus võib täpsest erineda ülimalt 10610^{-6} võrra.

힌트

Teises näites on optimaalne puu kuju järgmine:

[이미지 1]

예제

예제 1

입력
4 2 1
2
0.2 0.2 0.3 0.3
출력
1.5000000

예제 2

입력
13 4 2
1
0
0.06 0.06 0.06 0.06 0.06 0.06 0.115 0.115 0.115 0.115 0.06 0.06 0.06
출력
1.7200000
이 문제는 채점 준비 중입니다. 테스트 데이터가 확보되면 제출이 가능합니다.