天天看點

趣味ACM題 聖騎士的斬殺趣味ACM題 聖騎士的斬殺

最近一張山東省的acm試卷在網上廣為流傳,道題目是根據暴雪著名遊戲爐石傳說來設計的,是計算在一局遊戲中死魚騎是否能一回合斬殺對手。下面是我個人的解答,如有不嚴謹之處,歡迎指正!

趣味ACM題 聖騎士的斬殺趣味ACM題 聖騎士的斬殺

<a href="#%e8%b6%a3%e5%91%b3acm%e9%a2%98-%e5%9c%a3%e9%aa%91%e5%a3%ab%e7%9a%84%e6%96%a9%e6%9d%80">趣味acm題 聖騎士的斬殺</a>

<a href="#%e7%9b%ae%e5%bd%95">目錄</a>

<a href="#%e9%a2%98%e7%9b%ae%e6%8f%8f%e8%bf%b0">題目描述</a>

<a href="#%e9%a2%98%e7%9b%ae%e5%88%86%e6%9e%90">題目分析</a>

<a href="#%e7%a4%ba%e4%be%8b%e4%bb%a3%e7%a0%81">示例代碼</a>

<a href="#%e8%bf%90%e8%a1%8c%e7%bb%93%e6%9e%9c">運作結果</a>

題目描述較長,沒玩過爐石傳說的小夥伴可能第一時間看不太懂,不過沒關系,可以先看後面的題目分析,有需要的時候再倒回來看題目描述。

魚人是爐石裡的一支強大種族,在探險者協會裡,聖騎士有了一張新牌,叫亡者歸來,效果是召喚本輪遊戲中7個已死的魚人。如果死掉的不足7個,那麼召喚的數量就會不足7個。

魚人有很多,下面的4個是:

寒光智者:3費用 2攻擊 2血量 戰吼:每個玩家抽兩張牌。

魚人領軍:3費用 3攻擊 3血量 所有其他魚人攻擊+2,血量+1。

藍腮戰士:2費用 2攻擊 1血量 沖鋒。

老瞎眼:4費用 2攻擊 4血量 沖鋒,每有一個其他魚人在場就增加一點攻擊。

下面給一些說明:

費用:召喚随從的消耗,技能效果召喚的随從不消耗額外的費用,隻會消耗卡牌本身的費用,雙方玩家最多擁有10點費用。

攻擊:随從每次能夠造成的傷害。

戰吼:擁有戰吼的随從,在從手牌裡打出時會觸發這個效果,被技能召喚的随從不會觸發戰吼效果。

沖鋒:本來,在召喚出來的這一輪,随從是無法攻擊的,但是有沖鋒就可以,召喚回合可以直接攻擊。

戰場:遊戲盤,遊戲内各種内容發生的地方,每場遊戲都發生在棋盤上

現在該你出牌了,你有10點法力,隻剩下一張亡者歸來。戰場上沒有任何随從,意味着你的随從可以直接攻擊對手英雄。你還記得你出過的魚人,也知道對手英雄的血量,那你能夠用手上唯一這一張牌赢得勝利嗎?

輸入:

多種測試方案,第1行的整數表示測試數量(小于等于22000)

每個測試的第1行都包括2個整數n(已死魚人0&lt;=n&lt;=7),h(對手英雄血量 0&lt;<code>h</code>&lt;30)

後續n行裡,每行都包括字元串,表示已死魚人名稱,字元串隻能為:”寒光智者”,”魚人領軍”,”藍腮戰士”,”老瞎眼”。

輸出:

列出所有方案後,如果能赢得遊戲,那麼就輸出”嗚啦啦啦啦呱啦哈哈!”,否則輸出”跟你說個笑話,聖騎士的斬殺”。使用随從攻擊對方英雄,使其血量少于等于0即可勝利。

示例(注意:coldlight oracle,murloc warleader, bluegill warrior, old murk-eye 分别是 寒光智者,魚人領軍,藍腮戰士,老瞎眼):

趣味ACM題 聖騎士的斬殺趣味ACM題 聖騎士的斬殺

題目描述很長,但隻要找到關鍵點很容易就做出來了。由于召喚出來的魚人隻有具備沖鋒屬性的才能在本回合進行攻擊,是以我們隻需要考慮藍腮戰士和老瞎眼的能夠造成的傷害。進而我們将題目轉化為比較兩個整數的大小,一是敵方英雄的血量,二是藍腮戰士數量<code>*</code>藍腮戰士攻擊與老瞎眼數量<code>*</code>老瞎眼攻擊的總和。而藍腮戰士的攻擊等于2點自身攻擊加上每個魚人領軍提供的2點額外攻擊,老瞎眼的攻擊等于2點自身攻擊加上每個魚人領軍提供的2點額外攻擊再加上除自身以外每有一個其他魚人在場提供的1點攻擊。

分析到這裡,題目就已經算是解答出來了,剩下的也就隻是考察代碼的基本功了。