\(NOIP\)模擬\(DAY1\)測試
$by $ 一扶蘇一優化
【題目背景】spa
細雪飄落長街,楓葉紅透又一年
不僅爲故友流連,其實我也戀長安
聽門外足音慢,依稀見舊時容顏
故事幾經悲歡,結局都與你有關
——銀臨《大美江湖》table
【問題描述】 class
扶蘇聽着《大美江湖》,在劍三裏控制着他的人物炮姐來到了長安。 長安城中有一個任務,須要扶蘇進入地下的機關道,機關道是一個 \(n×m\) 的矩形地 圖,裏面有一些怪物和藥水。扶蘇操控着炮姐在機關道中游蕩。有些時候他但願問問你 他的角色有多少攻擊力、防護力以及丟失了多少血量。 具體的,在輸入文件中會給出一個$ n×m \(的矩形地圖,地圖中第\) i \(行第 j 列的字符\) C_{ij} \(表明機關道中第\) i \(行第\) j \(列的元素是什麼。具體的,\)C_{ij}\(={‘.’,‘\)R\(’,‘\)Q\(’,‘\)Y\(’,‘\)M$’}。 其中,遍歷
一、字符 . 表明此處能夠經過,且無其餘元素im
二、字符 \(R\) 表明此處爲生命藥水,能夠減小炮姐 10 點丟失的血量 \(HP\)地圖
三、字符 \(Q\) 表明此處爲力量藥水,能夠增長炮姐 5 點攻擊力 \(ST\)統計
四、字符$ Y $表明此處爲防護藥水,能夠增長炮姐 5 點防護力 \(DE\)數據
五、字符$ M $表明此處爲怪物,炮姐會損失相應血量 每隻怪物都有三個參數來描述他們的屬性,分別是血量 \(HP_{enemy}\),攻擊力$ ST_{enemy}$,防護力 \(DE_{enemy}\)。且全部怪物的屬性都相同。 一旦走到怪物格,遭遇戰將開始。扶蘇必定會打死怪物,怪物對炮姐形成的傷害爲
\[max(1,\lceil \frac {HP_{enemy}} {max(1,ST_{my}-DE_{enemy})}\rceil \times max(1,ST_{enemy}-DE_{my}))\] (真難打)
其中 \(max(a,b)\)表明取$ a \(和\) b \(的最大值;\)\lceil x \rceil \(的值爲不小於\) x \(的最小整數;下標爲\) enemy \(的參數表明怪物的參數,下標爲\) my \(的參數表明炮姐的參數 你會收到\) q \(次操做,每次操做要麼是一次查詢,要麼是一次移動。 對於移動,你會再得到一個數字參數,這個參數只多是\) 1/2/3/4 $其中的一個,表明 炮姐向地圖的 左/右/上/下 移動。
【輸入格式】
輸入文件名爲$ mzq.in\(。 輸入文件中有且僅有一組數據,第一行爲兩個正整數\) n \(和\) m$,表明地圖的大小。下面 \(n\) 行,每行$ m \(個字符,描述機關道的地圖 下面一行有三個正整數,分別表明\)HP_{enemy}\(,\)ST_{enemy}\(,\)DE_{enemy} $下面一行有兩個整數 \(x\),\(y\),表明炮姐初始在第 $x \(行第\) y \(列出發。若是出發點有怪物,不發生戰鬥,若是有道具,不會將其撿拾。 下面一行給出兩個正整數,表明炮姐初始的\) ST \(和\) DE\(。 下面一行給出一個整數\) q\(,表明操做個數如下\)q$行,每行首先有一個數字,若是是 1,則表明一次查詢。不然數字必定是 2, 表明炮姐的一次移動,一個空格後會給出一個數字,做爲移動的參數。
【輸出格式】
輸出文件名爲$ mzq.out\(。 對於每一個查詢,輸出一行三個用空格隔開的整數,表明炮姐損失的血量\) HP\(,當前的攻擊力\) ST\(,以及當前的防護力\) DE$
【輸入輸出樣例 】
\(mzq.in\)
5 5
$MMMMM $
$R R R R R $
$QQQQQ $
\(YYYYY\)
. . . . .
5 5 5
5 1
10 10
8
2 3
1
2 3
2 3
2 3
1
2 2
1
$mzq.out $
0 10 15
1 15 15
2 15 15
【數據規模與約定】
本題共 10 個測試點,不捆綁測試,各測試點等分。各測試點的數據性質以下表
測試點編號 | n | m | q | 特殊性質 |
---|---|---|---|---|
1 | =1 | =1 | =0 | 無 |
二、3 | =1 | \(\leq 10\) | \(\leq 1000\) | 無 |
四、5 | =1 | =1 | \(\leq 1000\) | 保證人物不移動 |
六、七、8 | \(\leq 100\) | \(\leq 100\) | \(\leq 10000\) | 保證地圖中沒有怪物 |
九、10 | \(\leq 100\) | \(\leq 100\) | \(\leq 10000\) | 無 |
對於100%的數據,\(1≤n,m≤100,0≤q≤10000\),保證移動是合法的,即無需擔憂走到地圖外。咱們認爲人物不會由於打怪而死亡。
對於100%的數據,怪物和人物的攻擊力、血量、防護力都不超過100,不低於0。
注意:若是屢次進入同一個格子,格子上的藥水能夠重複拾取,小怪會重複出現
注意:若是在拾取藥水的時候人物損失的生命值低於10,則會將損失的生命值降至0
扶蘇出的題就是毒瘤(劃掉
對於這種給出不一樣測試點的具體數據的題,咱們能夠考慮分步得分
一共有0個操做,那麼就說明沒有輸出,因此必定會獲得10分
保證人物不移動,因此必定不會有減血,也不會有任何能力值的增長。那麼有多少1就輸出多少組數據。獲得20分
地圖上沒有怪物,就不須要計算減血的那個複雜式子,直接累加藥水的屬性就行了。又能獲得30分
就是一個暴力模擬,模擬每一次行走減血的式子和藥水的屬性能夠\(O(1)\)算的,因此總複雜度是\(O(q)\)的
題目描述:
扶蘇給了你一棵樹,這棵樹上長滿了幼嫩的新葉,咱們約定這棵樹的根是 \(1\),每一個節
點都表明樹上的一個葉子。
若是你不知道什麼叫樹,你能夠認爲樹是一個邊數比節點個數少 $1 \(的無向連通圖。 咱們若是約定節點\) u \(是樹\) T \(的根,則能夠定義一個節點\) v \(到根的路徑爲該無向圖上\) u\(,\) v$
兩個節點之間的簡單路徑上的節點集合(包括路徑的兩個端點)。能夠證實,這樣的簡單路
徑只有一條。
咱們定義節點$ x \(是節點\) y \(的祖先\)(x\neq y)\(,當且僅當\) x \(在\) y \(到根的路徑上。 如今扶蘇想在這棵樹上選定一個集合,將其稱之爲幼嫩集合,來比較集合中的節點 哪一個最幼嫩。注意到一旦集合中存在兩個節點\) u\(,\) v\(,使得\) u \(是\) v \(的祖先,那麼必定\) v $要比
$u \(更幼嫩,由於\) v $是在 $u \(的枝丫上生長出來的,那麼這樣的集合就是沒有意義的。也就是 說,扶蘇所選擇的集合必定知足要求「對於任意集合中的元素對\) (u, v)\(,\)u $不是 \(v\) 的祖
先」。
扶蘇其實對這些節點哪一個最幼嫩並不感興趣,也對他能選出多少集合不感興趣,因
爲這些都是爲了問你下面的問題而創造出的題目背景。
扶蘇給每一個節點都定義了一個權值,具體的,咱們會給出一個參數$ T\(,規定\) i $號節點
的權值爲 \(T^i\)。
咱們定義一個幼嫩集合幼嫩指數爲集合內節點的權值和。如今扶蘇想請問你,對於
他全部可能選出的集合,這些集合的幼嫩指數之和是多少。
爲了不答案過大,請你輸出答案對 \(10^9+7\) 取模的結果。
題解:
子任務 1:
只有一個點,因此只有{1} 這一種集合,因而答案爲 1。指望得分 5 分。
子任務 二、3:
爆搜,枚舉全部可能的集合,而後計算答案。
因爲每一個點只有選進集合或不選兩種可能,因此一共有 2
n 個集合,而後能夠
O(n) 的去檢驗集合是否合法,順便統計答案。因而總複雜度 \(O(2n×n)\)。指望得分25分。
子任務 四、5:
考慮 \(DP\)。設$ f_u \(是以\) u \(爲根的子樹的答案。 若是\) u \(沒有孩子,那麼\) f_u = u$
T。
若是$ u \(只有一個孩子\) v\(,那麼要麼選\) u \(不選\) u \(的子孫,要麼不選\) u\(。不選\) u
\(的答案即爲\) f_v\(,選\) u \(的答案即爲\) u
T\(。兩種狀況加起來就是\) f_u$。
若是 \(u\) 有兩個孩子$ x,y$。考慮要麼選 \(u\),要麼只選 \(x\) 的子樹內的元素,要麼
只選$ y$ 的子樹內的元素,要麼既選 x 內的元素又選 y 內的元素但不選 u。前三種
狀況的答案易得。如今考慮第四種狀況的答案。設 s 是 x 子樹內的某個集合。考
慮不管 y 的子樹內怎麼選,再加上 s 都是合法的,由於 y 和 x 之間沒有祖前後
代關係且 s 在 x 以內。設$ g_u $是以 u 爲根能選擇的集合個數,那麼一共有 \(g_y\) 個
集合選擇 s 之後依舊合法,設 s 的權值和爲$ ws\(,因而 s 的貢獻即爲\) w_s×g_y\(。因爲 fx 爲 x 子樹內全部可能集合的權值和,因此能夠發現 ws fx 。因而\) x $子樹內
的集合對答案的總貢獻是 \(f_x×g_y\)。同理,y 子樹內的集合對答案的貢獻是$ f_y×g_y$。
因而 \(f_u=f_y×g_x+f_x×g_y+f_x+f_y+u\)
T。\(g_u=g_x×g_y+g_x+g_y+1\)。時間複雜度O(n),指望得分 30
分。
子任務六、7:
慮在遍歷子節點的時候,已經遍歷了一些子節點,如今新加入了一個子節點。
因爲新加入一個子節點與以前遍歷的子節點沒有祖前後代關係,因而能夠以前遍歷
過得子樹當作一棵子樹,而後問題就變成了子任務四、5。指望得分 40 分。
須要注意的是因爲讀入規模達到了\(10^6\)左右,須要普通的讀入優化。