NOIP2011 瑪雅遊戲

2022-05-05 01:33:13 字數 2581 閱讀 5088

mayan puzzle 是最近流行起來的乙個遊戲。遊戲介面是乙個7 行5 列的棋盤,上面堆放著一些方塊,方塊不能懸空堆放,即方塊必須放在最下面一行,或者放在其他方塊之上。遊戲通關是指在規定的步數內消除所有的方塊,消除方塊的規則如下: 1、 每步移動可以且僅可以沿橫向(即向左或向右)拖動某一方塊一格:當拖動這一方塊時,如果拖動後到達的位置(以下稱目標位置)也有方塊,那麼這兩個方塊將交換位置(參見輸入輸出樣例說明中的圖6 到圖7);如果目標位置上沒有方塊,那麼被拖動的方塊將從原來的豎列中抽出,並從目標位置上掉落(直到不懸空,參見下面圖1 和圖2);

2、 任一時刻,如果在一橫行或者豎列上有連續三個或者三個以上相同顏色的方塊,則它們將立即被消除(參見圖1 到圖3)。 注意: 

a) 如果同時有多組方塊滿足消除條件,幾組方塊會同時被消除(例如下面圖4,三個顏色為1 的方塊和三個顏色為2 的方塊會同時被消除,最後剩下乙個顏色為2 的方塊)。 

b) 當出現行和列都滿足消除條件且行列共享某個方塊時,行和列上滿足消除條件的所有方塊會被同時消除(例如下面圖5 所示的情形,5 個方塊會同時被消除)。 

3、 方塊消除之後,消除位置之上的方塊將掉落,掉落後可能會引起新的方塊消除。注意:掉落的過程中將不會有方塊的消除。 上面圖1 到圖3 給出了在棋盤上移動一塊方塊之後棋盤的變化。棋盤的左下角方塊的座標為(0, 0),將位於(3, 3)的方塊向左移動之後,遊戲介面從圖1 變成圖2 所示的狀態,此時在一豎列上有連續三塊顏色為4 的方塊,滿足消除條件,消除連續3 塊顏色為4 的方塊後,上方的顏色為3 的方塊掉落,形成圖3 所示的局面。

共6 行。 

第一行為乙個正整數n,表示要求遊戲通關的步數。 

接下來的5 行,描述7 * 5 的遊戲介面。每行若干個整數,每兩個整數之間用乙個空格隔開,每行以乙個0 結束,自下向上表示每豎列方塊的顏色編號(顏色不多於10 種,從1 開始順序編號,相同數字表示相同顏色)。 

輸入資料保證初始棋盤中沒有可以消除的方塊。

如果有解決方案,輸出n 行,每行包含3 個整數x,y,g,表示一次移動,每兩個整數之間用乙個空格隔開,其中(x,y)表示要移動的方塊的座標,g 表示移動的方向,1 表示向右移動,-1 表示向左移動。注意:多組解時,按照x 為第一關健字,y 為第二關健字,1優先於-1,給出一組字典序最小的解。遊戲介面左下角的座標為(0,0)。 

如果沒有解決方案,輸出一行,包含乙個整數-1。

3 1 0 

2 1 0 

2 3 4 0 

3 1 0 

2 4 3 4 0

2 1 1 

3 1 1 

3 0 1

樣例說明: 

按箭頭方向的順序分別為圖6 到圖11

資料範圍 

對於30%的資料,初始棋盤上的方塊都在棋盤的最下面一行; 

對於100%的資料,0 < n≤5。

思路

1 #include2 #include3 #include4 #include5

#define rg register

6#define ll long long

7#define maxx 1000001

8#define dd double

9using

namespace

std;

10struct

matrix

13 }st;bool

in[6][8

];14

struct

a17 a(int _x,int _y,int

_z):x(_x),y(_y),z(_z){}

18 }ans[12

];19

int n,x,q;bool

flag;

20bool

yess()

25matrix papapa()return

hehe;32}

33void

check()if(ii)st=papapa(),check();

43else

return;44

}45void dfs(int

step)

47if(step>n)return;matrix s=st;

48for(int i=0;i<5;++i)

49for(int j=0;s.aa[i][j];++j)

55   st=s;

56 }if(i<4&&!s.aa[i+1

][j])

64 st=s;65}

66if(i&&st.aa[i-1

][j])

71 st=s;72}

73if(i&&!s.aa[i-1

][j])

80 st=s;81}

82}83}

84int

main()dfs(1);if(!q)cout<

);90

for(int i=q;i;i--)printf("

%d %d %d\n

",ans[i].x,ans[i].y,ans[i].z);

91return0;

92 }

NOIP瑪雅遊戲

mayan puzzle 是最近流行起來的乙個遊戲。遊戲介面是乙個7 行5 列的棋盤,上面堆放著一些方塊,方塊不能懸空堆放,即方塊必須放在最下面一行,或者放在其他方塊之上。遊戲通關是指在規定的步數內消除所有的方塊 消除方塊的規則如下 1 每步移動可以且僅可以沿橫向 即向左或向右 拖動某一方塊一格 當...

NOIP2011提高組 Mayan遊戲

mayan puzzle是最近流行起來的乙個遊戲。遊戲介面是乙個 7 行5 列的棋盤,上面堆放著一些方塊,方塊不能懸空堆放,即方塊必須放在最下面一行,或者放在其他方塊之上。遊戲通關是指在規定的步數內消除所有的方塊,消除方塊的規則如下 1 每步移動可以且僅可以沿橫向 即向左或向右 拖動某一方塊一格 當...

NOIP2011提高組 Mayan遊戲

題目 洛谷p1312 vijos p1738 codevs1136。題目大意 在乙個7行5列的棋盤 左下角座標0,0 上,有一些不同顏色的棋子。規定某一時刻,連續三個橫排或豎列的棋子顏色相同,則它們被消掉 同時滿足條件的一起消掉,存在多個這樣的情況有公共棋子時,所有的都消掉 然後有一種操作 將乙個棋...