小明是乙個放置類遊戲愛好者,他只要盯著某些東西的運動過程,就能獲得放鬆與舒適。所以小明的乙個癖好就是盯著他的電腦的螢幕保護程式動畫**。小明的螢幕保護程式動畫是這樣的,螢幕上會出現乙個 n 行 m 列的方格矩陣,其中有兩類格仔,黑色的格仔叫做空地,白色的格仔叫做牆,矩陣周圍的一圈都是牆(即第一行、第一列、第 n 行、第 m 列都是牆,其餘的地方為空地)。然後螢幕保護程式出現的時候,會隨機在乙個空地上出現乙個帶顏色的格仔叫做小球(會是紅綠藍三種顏色其中一種),隨後,這個格仔會隨機乙個方向(左上,右上,右下,左下四個方向其中之一)每秒移動一格。當顏色格仔碰到牆時,其碰到牆方向的運動向量會反向,同時自己格仔的顏色會變化(變成紅綠藍其中一種,且必定與原顏色不同)。
小明就是能盯著這個小球來回彈跳變色能看一下午。某天小明看得正開心的時候突然想上廁所,他記住了格仔矩陣的狀態和小球當前狀態,他想知道從自己離開座位到上廁所回來後這段時間裡,小球的顏色變化了多少次。
輸入描述:
每個輸入資料報含多個測試點。
第一行為測試點的個數 q(q <= 5)。
對於每個測試點,第一行為兩個整數 n,m(0 < n <= 200,0 < m <= 200),分別表示格仔矩陣有 n 行 m 列。同時這個矩陣,是以第一行在上方,第 n 行在下方,第一列在左邊,第 m 列在右邊的樣例顯示在小明面前的。
接下來的一行,四個整數 x(3 <= x <= n-2), y(3 <= y <= m-2), w(0 <= w <= 3), t(0 < t < 1000)。x、y 表示初始化時(第 0 秒)小球處於 x 行 y 列的格仔上,w 表示小球初始的運動方向,0 表示左上方,1 表示右上方,2 表示右下方,3 表示左下方。t 表示小明離開座位到上完廁所回來需要 t 秒。
輸出描述:
對於每個測試點,輸出一行,該行包含乙個整數 c,表示 t 秒內(即 1 秒到 t 秒之間)小球的顏色變化了 c 次。
example 1:
input:說明:56 5
4 3 0 42
10 6
5 3 1 46
5 53 3 1 7
5 53 3 1 6
7 74 5 2 9
output:
352286
5
對於乙個 7*5 大小的螢幕。
第 0 秒時,螢幕的區塊狀態為:(其中2表示小球,小球運動方向為左下)
1 1 1 1 1
1 0 0 0 1
1 0 2 0 1
1 0 0 0 1
1 0 0 0 1
1 0 0 0 1
1 1 1 1 1
第 1 秒時,螢幕的區塊狀態為:小球碰到左側的牆,所以水平方向上運動動量反向,豎直方向上的運動動量不變,所以運動方向變為右下。同時由於碰到了磚塊,其顏色發生了變化。
1 1 1 1 1
1 0 0 0 1
1 0 0 0 1
1 3 0 0 1
1 0 0 0 1
1 0 0 0 1
1 1 1 1 1
第 2 秒時,螢幕的區塊狀態為:(其中3表示小球,小球運動方向為右下)
1 1 1 1 1
1 0 0 0 1
1 0 0 0 1
1 0 0 0 1
1 0 3 0 1
1 0 0 0 1
1 1 1 1 1
以輸入10 6
5 3 1 46
為例進行分析。
x, y 表示此時小球所在行和列,w1, w2 表示小球此時在行,列上的運動方向,比如w1=-1,w2=1表示向矩陣右上方運動。當行的位置 x==1 或者 x==n-2 時,需要將行運動方向 w1 反向;當列的位置 y==1 或者 y==m-2 時,需要將行運動方向 w2 反向。
每次在行運動方向上反向一次,或者在列運動方向上反向一次,球需要變色一次。
回溯法 矩陣中的路徑,機械人的運動範圍
回溯法是做了剪枝改進的窮舉法,適合由多個步驟組成,並且每個步驟都有多個選項組成的問題。回溯法的解空間樹到達葉結點時,如果在葉子結點的狀態滿足題目的約束條件,那麼就找到了乙個可行的解決方案。回溯二字在於,如果在解空間樹上的某個結點不滿足約束條件,那麼就退回到上一結點,再嘗試其它選項 如果全部試過都不行...
矩陣中的路徑 機械人的運動範圍題目分析
矩陣中的路徑 和 機械人的運動範圍 是劍指offer的倒數第2,3道題目,因為這兩道題思路類似,就放在一起說。請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中向左 右 上 下移動一格。如果一條路徑經過了矩陣的某一格,那麼該路...
在C 中實現矩陣運算
在c 中實現矩陣運算 環境 主機 xp 開發環境 vs2008 功能 在c 中實現矩陣運算 源 using system using system.collections.generic using system.componentmodel using system.data using syst...