CCF 201604 2 俄羅斯方塊

2022-05-31 10:36:07 字數 2533 閱讀 3449

問題描述

試題編號:

201604-2

試題名稱:

俄羅斯方塊

時間限制:

1.0s

記憶體限制:

256.0mb

問題描述:

問題描述

俄羅斯方塊是俄羅斯人阿列克謝·帕基特諾夫發明的一款休閒遊戲。

遊戲在乙個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

解題思路:

當時測試的時候用的是dfs過的,寫的比較麻煩,雖然滿分過了,但不推薦。用最直接的方法重新寫了一下。把板塊圖案輸入進來之後,找哪些方塊是最底面的,當然是那四個裡面的處於最底層的。為了判斷是不是最底層的,開陣列的時候多開了一層,直接判斷下面是不是0就知道是不是最底層的。然後根據題目中給出的最後乙個數,先把列進行了偏移的調整。然後計算行數的偏移量是多少。直接找到最底層的方塊,向下探索,遇到1,說明偏移量就是兩者之差-1。沒有遇到的話就是當前方塊到最底層的距離。然後再這些距離中找到最小值就是行數的偏移量,直接在輸入的矩陣裡面進行修改就可以了,最後列印輸出。

源**:

#include#include#include#include#includeusing namespace std;

int main()

} for(i=0;i<4;i++)

}} scanf("%d",&pos);

base = pos-1;//因為儲存的時候下標是從0開始的

for(i=0;i<4;i++) }

for(i=0;i<4;i++)

}if(j==15)

mindis=min(mindis,dis[i]);//所有距離值求最小值就是行數偏移量

} }for(i=0;i<4;i++)

for(i=0;i<15;i++)

printf("%d\n",g[i][j]);

} return 0;

}

CCF 201604 2 俄羅斯方塊

問題描述 俄羅斯方塊是俄羅斯人阿列克謝 帕基特諾夫發明的一款休閒遊戲。遊戲在乙個15行10列的方格圖上進行,方格圖上的每乙個格仔可能已經放置了方塊,或者沒有放置方塊。每一輪,都會有乙個新的由4個小方塊組成的板塊從方格圖的上方落下,玩家可以操作板塊左右移動放到合適的位置,當板塊中某乙個方塊的下邊緣與方...

ccf201604 2 俄羅斯方塊

toc試題編號 201604 2 試題名稱 俄羅斯方塊 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 俄羅斯方塊是俄羅斯人阿列克謝 帕基特諾夫發明的一款休閒遊戲。遊戲在乙個15行10列的方格圖上進行,方格圖上的每乙個格仔可能已經放置了方塊,或者沒有放置方塊。每一輪,都會有乙個新...

CCF 201604 2 俄羅斯方塊

試題編號 201604 2 試題名稱 俄羅斯方塊 時間限制 1.0s 記憶體限制 256.0mb 問題描述 俄羅斯方塊是俄羅斯人阿列克謝 帕基特諾夫發明的一款休閒遊戲。遊戲在乙個15行10列的方格圖上進行,方格圖上的每乙個格仔可能已經放置了方塊,或者沒有放置方塊。每一輪,都會有乙個新的由4個小方塊組...