問題描述
俄羅斯方塊是俄羅斯人阿列克謝·帕基特諾夫發明的一款休閒遊戲。
遊戲在乙個15行10列的方格圖上進行,方格圖上的每乙個格仔可能已經放置了方塊,或者沒有放置方塊。每一輪,都會有乙個新的由4個小方塊組成的板塊從方格圖的上方落下,玩家可以操作板塊左右移動放到合適的位置,當板塊中某乙個方塊的下邊緣與方格圖上的方塊上邊緣重合或者達到下邊界時,板塊不再移動,如果此時方格圖的某一行全放滿了方塊,則該行被消除並得分。
在這個問題中,你需要寫乙個程式來模擬板塊下落,你不需要處理玩家的操作,也不需要處理消行和得分。
具體的,給定乙個初始的方格圖,以及乙個板塊的形狀和它下落的初始位置,你要給出最終的方格圖。
輸入格式
輸入的前15行包含初始的方格圖,每行包含10個數字,相鄰的數字用空格分隔。如果乙個數字是0,表示對應的方格中沒有方塊,如果數字是1,則表示初始的時候有方塊。輸入保證前4行中的數字都是0。
輸入的第16至第19行包含新加入的板塊的形狀,每行包含4個數字,組成了板塊圖案,同樣0表示沒方塊,1表示有方塊。輸入保證板塊的圖案中正好包含4個方塊,且4個方塊是連在一起的(準確的說,4個方塊是四連通的,即給定的板塊是俄羅斯方塊的標準板塊)。
第20行包含乙個1到7之間的整數,表示板塊圖案最左邊開始的時候是在方格圖的哪一列中。注意,這裡的板塊圖案指的是16至19行所輸入的板塊圖案,如果板塊圖案的最左邊一列全是0,則它的左邊和實際所表示的板塊的左邊是不一致的(見樣例)
輸出格式
輸出15行,每行10個數字,相鄰的數字之間用乙個空格分隔,表示板塊下落後的方格圖。注意,你不需要處理最終的消行。
樣例輸入
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0 0 0
1 1 1 0 0 0 1 1 1 1
0 0 0 0 1 0 0 0 0 0
0 0 0 0
0 1 1 1
0 0 0 1
0 0 0 0
3樣例輸出
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0 0 0
1 1 1 1 1 1 1 1 1 1
0 0 0 0 1 1 0 0 0 0
思路:把四個方塊子孤立出來,單獨考慮他們的相對位置,其他零的部分,全都忽略,根據乙個方塊,找到是否有滿足其他方塊的位置,即位置標零的地方。我這是從下往上遍歷,就要考慮放方塊的上方是否有1!!!!我覺得可能從頂部往下遍歷可能會更好點,但是入了坑就不想爬起來了。
#include
//把小矩陣的每個方塊孤立出來來放,我這是從下往上面放,關鍵放方塊的上面沒有1,就能放下去,能成功
int a[16]
[11];
int b[5]
[5];
struct winwins[4]
;struct lenlens[3]
;int
main
(void
)for
(int i=
0;i1;i++
)int n;
scanf
("%d"
,&n)
;for
(int i=
15;i>=
1;i--)}
if(!flag)}if
(!flag1)
else}}
if(cnt==3)
break;}
else}}
else
}for
(int i=
1;i<
16;i++
)return0;
}
201604 2 俄羅斯方塊
試題編號 201604 2 試題名稱 俄羅斯方塊 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 俄羅斯方塊是俄羅斯人阿列克謝 帕基特諾夫發明的一款休閒遊戲。遊戲在乙個15行10列的方格圖上進行,方格圖上的每乙個格仔可能已經放置了方塊,或者沒有放置方塊。每一輪,都會有乙個新的由4...
201604 2 俄羅斯方塊
解題思路 用乙個二維陣列mp儲存原來的方塊圖,用另乙個二維陣列tmp儲存臨時的方塊圖,先把tmp完全按照mp完全複製,然後加入新的方塊,統計出1的個數,然後使用to down函式將加入的新方塊每次往下移動乙個格仔,如果移動過程中tmp中1的個數變少了,說明新方塊覆蓋了原來的格仔,網上回溯乙個格仔就是...
201604 2 俄羅斯方塊
對下降的方塊確定上下左右界限,在地圖中找到下降的起始列和結束列 和下降塊匹配 遍歷地圖map,直到當前的位置的值和下降塊該處的值相與,如果 1,說明找到了第乙個可能是界限的行,然後從當前行進行遍歷,遍歷的方法是 假如下降塊為 0 1 1 0 0 0 1 0 0 0 1 0 0 0 0 0 分離之後的...