暗黑破壞神二(Diablo II)是一款有名的動作角色扮演遊戲。在遊戲你可以扮演法師、聖騎士等等不同的職業來殺怪、解謎。這個遊戲的特色在於,每種職業都有他獨特的技能系統,當你等級越高,你可以練的技能就越多,就可以有更多的方法來解決怪物。我們現在將暗黑破壞神裡的技能系統詳細說明:
現在問題來了。小瑋新接觸這個遊戲,他聽別人說,法師只要練了 $20$ 點火球、 $20$ 點隕石、 $20$ 點支配火燄、 $10$ 點暖氣,就天下無敵了。所以他想要看看他的法師最快要到等級多少的時候才能達到這種地步。
如果小瑋的法師想要變天下無敵,他至少要付出如圖二所標的,共 $74$ 點技能點。所以在考慮了前置技能和技能等級的限制後,我們發現小瑋至少要到 $75$ 級才可達到此地步。
你現在的任務就是要寫個程式,來解決這樣的問題:給你一個技能系統、欲練成的技能與點數,看看至少要到等級多少才能練成。
輸入檔包含了多筆的測試資料。每一筆測試資料的內容如下:
技能名稱 技能等級 前置技能個數 前置技能1 前置技能2 ......
例如:
meteor 24 2 fire_wall fire_ball
敘述著 meteor
(隕石)這個技能,是等級 $24$ 的技能;它有兩個前置技能,一個是 fire_wall
(火牆),另一個是 fire_ball
(火球)。
再舉一個例子:
fire_mastery 30 0
表示說 fire_mastery
(支配火燄)這個技能,是等級 $30$ 的技能,而且此技能不需要前置技能。
你可以假設技能的名字裡不會有空白,且長度不會超 $64$ 個字元。
欲練技能 欲練點數
例如:
fire_ball 20
meteor 20
fire_mastery 20
warmth 10
這四行就表示說,希望將 fire_ball, meteor, fire_mastery
這三個技能練到 $20$ 點,而且將 warmth
這個技能練到 $10$ 點。
以上的這 $s+n+2$ 行就代表著一筆測試資料。
輸入檔以 $s=0$ 作結束。(你不用也不能處理這一筆不合法的測試資料)
對於每一筆測試資料,依序輸出 (i) 一個整數,代表「人物至少要到幾級才能練成測資要求的情況」;或是 (ii) 輸出字串 IMPOSSIBLE
,如果人物到了 $99$ 級以後,還無法完全達到想要的情況。
請每行輸出恰一組測資的答案。
在範例輸入裡共有四筆測資。第一筆測資跟最前面題目所舉例的情況是一模一樣的,可以對照圖一作參考。
第二筆測資,雖然在等級 $6$ 的時候就可以練一點 sneak
,而練完一點還會剩下三點未使用(等級 $2$ 放一點在 hide
,升等級 $3,4,5$ 時都沒用到,升等級 $6$ 時共有四點可以使用,放一點在 sneak
還剩三點),但是根據前面「等級 $6$ 技能」的定義:要放第二點在 sneak
上,必須要到等級 $7$ 才可以;所以即使在等級 $6$ 的時有三點可用的技能點,這時卻不能放第二點在 sneak
上。
第三筆測資,在升等級 $2$ 的時候放一點在 skeleton
上;升等級 $3$ 的時候放一點在 skeleton_mastery
上,以後每升一級還是照樣把新得到的技能點放在 skeleton_mastery
。所以升到等級 $22$ 時, skeleton_mastery
就可以點到二十點。(而且此時不會有多餘的技能點可用)
第四筆測資,因為人物到了 $99$ 級最多只有 $98$ 點技能點可以用,但是要達到測資要的情況,必須要有 $100$ 點技能點,所以顯然此人物到了 $99$ 級時還是無法達到要求,故輸出IMPOSSIBLE
。
2022/06/02 Update by FHVirus: 你可以假設輸入中,對於每一個技能,其前置技能都會較早被輸入。
原TIOJ1050 / NPSC2003決賽(prob F)
No. | Testdata Range | Score |
---|---|---|
1 | 0 | 100 |