CCF CSP 俄羅斯方塊(201604 2)

2021-10-05 16:27:59 字數 3040 閱讀 6828

問題描述

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

遊戲在乙個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個數字,相鄰的數字之間用乙個空格分隔,表示板塊下落後的方格圖。注意,你不需要處理最終的消行。

樣例輸入

000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

1000

0000

0100

0000

0001

0001

1100

0111

1000

0100

0000

0000

1110

0010

0003

樣例輸出

000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

1000

0000

0100

0000

0001

0001

1111

1111

1000

0110

000

思路整理

1.在讀入初始方格圖後,在初始方格圖的最下方再加上一行1,便於判斷是否越界(如果到最後一層仍滿足,再向下移動的時候一定會發生方塊重疊,此時已經不滿足要求,要向上移動一層。這樣可以省去判斷是否是最後一層的麻煩)

2.在讀入新加入板塊的同時,記錄下板塊中有方格的地方相對於板塊左上角的位置(**中有node結構體變數記錄其行與列)

3.board記錄方格圖

block記錄新加入的板塊

node記錄先加入板塊中1的相對座標

4.注釋中 ,方塊重疊說明當前位置不滿足條件

我的**

#include

using

namespace std;

const

int row =15;

const

int col =10;

const

int n =4;

struct node

;node node[n]

;int board[row+1]

[col]

;int block[n]

[n];

intmain()

}int k=0;

for(

int i=

0;i}for

(int i=

0;i)int col,row;

cin>>col;

col--

;//列是從0開始進行標號,給出的col從1開始標號

row=1;

//因為原始方格圖最開始四行全部為0,故新加入的板塊右上角在0行的時候一定不會發生方塊重疊現象,故從row=1開始判斷

bool flag=

false

;//當前未找到合適的位置

while

(!flag)

}//如果上述判斷中沒有方塊重疊現象發生

if(flag==

false)}

row--

;//方塊重疊發生,此時向上移動一層

for(

int i=

0;i)for

(int i=

0;icout<}return0;

}

CCF CSP 俄羅斯方塊

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

ccf csp 題目 俄羅斯方塊

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

CCF CSP試題 201604 2 俄羅斯方塊

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