回分類題庫
g060: B.KjumpingCube
關鍵字: NPSC 2009 國中組決賽

測資點 : 2 | Time Limit : 10000 ms | Memory Limit : 128000 KB
Accepted : 33 Times / 28 Users | Submit : 92 Times / 32 Users | Accepted rate : 88%
題目加入時間 : 2011-12-26 15:10

Content: 简体中文

Linux 裡有很多的內建小遊戲,大部份都以益智遊戲作為取向,例如3D數獨(Ksudoku),黑白棋(Iagno),數迴(Loopy),骰子遊戲(Tali) 等,而 KjumpingCube 則是一個對弈的遊戲。

這個遊戲的規則是這樣的:一剛開始,每個格子都會放有一顆珠珠,但所有格子皆不屬於任何一人。接著,兩人輪流放一顆珠珠,放珠珠的位置只能是不屬於任何人的格子,或者是擁有權為自己的格子。如果這個格子本來是不屬於任何人的,那麼當你選擇要將珠珠放入該格子後,格子所有權就屬於你的。

假若一個玩家將一個格子的珠珠放滿出來,則會進行擴張的動作。所謂滿出來的意思,是珠珠的個數超過自己的鄰居數,在這裡我們定義的鄰居一個格子至多只有上下左右四個,舉個例子,在角落的格子只會有兩個鄰居,因此當玩家在這格放珠珠後,使數量變成3個,那麼將會進行擴張。而擴張的方法如下,是將滿出來的那一格的珠珠各分一顆至他的附近鄰居,並且周圍的格子的擁有人將同時會變成該玩家,就算附近的格子可能已經屬對手的。讓格子擴張出去,是這個遊戲的重點,兩個人互相攻擊,互相將格子納入自己的勢力。以下是另一個擴張的例子。

也許你接著會有個問題,萬一某個格子珠珠滿出來而擴張,丟一顆珠珠到旁邊的格子後也使旁邊格子的珠珠滿出來會發生什麼事?答案是繼續擴張。一個好的玩家,會利用這一點做大規模的攻擊,將大部分的格子吃掉;也有人利用這點,一舉把別人殲滅。

這個遊戲的目的,就是讓對手無法再做任何動作,換句話說,就是你要佔有所有格子。

需要注意的的一件事情,當遊戲「全部都被佔領」時,就直接結束。換句話說,在連鎖擴張的過程假若已經分出勝負,則不繼續進行擴張的動作,因為已經沒有意義了。

Input:

測試資料包含多組測資,每組測資的第一行包含了 3 個數字,R C (2<=R, C<=10) T(1<=T),R 代表著這個棋盤幾行,C 代表著這個棋盤幾列,而T 代表著兩位玩家共進行了幾個回合(一個玩家放一顆珠珠就算一個回合)。接下來會有 T 行,每行有兩個數字 r c,代表每個回合該玩家將珠珠放在第 r 列第 c行。請注意我們是以 1 開始計數,因此左上角為第 1 列第 1 行。為了方便標示,我們假設第一位玩家(先手)為綠色,第二位玩家(後手)為藍色。R=C=T=0 代表測試資料結束。

我們保證所有測資一定合法,也就是每個玩家不會放珠子在別人的格子上,也不會遊戲判出勝負卻還繼續進行。

Output:

對於每組測資,請輸出兩個數字及遊戲狀態,第一及第二個數字代表著目前綠色及藍色的格子個數有幾個,而狀態可能有三個:”GREEN”代表遊戲已終局,且是綠色勝出;”BLUE” 代表遊戲已終局,且是藍色勝出;”processing”代表遊戲還未結束。

Sample Input:help

若題目沒有特別說明,則應該以多測資的方式讀取,若不知如何讀取請參考 a001 的範例程式。
2 2 1
1 1
2 2 2
1 1
2 2
2 2 3
1 1
2 2
1 1
2 2 4
1 1
2 2
1 1
2 2
0 0 0

Sample Output :

1 0 processing
1 1 processing
3 1 processing
0 4 BLUE

Hint :

Author :

NPSC 2009 國中組決賽 (管理員:sagit)

  Solve it!   Status Forum