阿里九遊開放平台近日上架了一款新的益智類遊戲——成三棋。成三棋是我國非常古老的乙個雙人棋類遊戲,其棋盤如下圖所示:
如果一條線段上的三個交叉點都被同一玩家的棋子佔據的話,則稱這條線段被該玩家 成三。現在,小紅和小明兩人在遊戲平台上下棋,其中小紅的棋子是黑色的。請你幫小紅計算他成三的線段數。
樣例對應的棋盤如下:
輸入格式
輸入第一行兩個整數 n,m(3 \le n, m \le 9)n,m(3≤n,m≤9),nn 表示小紅的棋子數,mm 表示小明的棋子數。
接下來 nn 行輸入小紅的棋子座標。
接下來 mm 行輸入小明的棋子座標。
輸入保證座標合法,並且棋子之間不重合。
輸出格式
輸出小紅成三的線段數。
樣例輸入
6 3
-1 0
-2 0
-3 0
-1 -1
-1 1
1 0
0 2
0 3
2 2
樣例輸出
2 我的思路比較簡單,先把輸入的資料存放在二維陣列a[10][2]裡,然後分別以行、列的方式遍歷該陣列,對該陣列中橫、縱座標相同的點進行分類,-3到3的7個數字,num[7]對在每一條縱線和橫線上的點進行統計,從而知道每乙個線段方向上有幾個點,b[7][6]則是記錄橫座標或者縱座標相同的點記錄另一維的數字,以便之後判斷是否在一條線段上。
在judge函式裡,如果乙個線段方向上有超過3個點,若這個數字不是0,那麼肯定只有三個點,而且這三個點在一條線段上(從圖里可以看出)。如果這個數字是0,可以對b[i]裡存的數字進行排序,先從小到大,如果前三個數字分別是-3,-2,-1,那麼肯定符合要求,再從大到小排序,如果前三個數字分別是3,2,1,也是符合要求的。之所以進行兩次排序判斷,是因為可能有6個點,在兩條線段上。
**如下:
#include
#include
using
namespace
std;
int point_num,useless,a[10][2]=,b[7][6]=,so=0;
int num[7]=;
void judge()}}
}void d(int c)
for(i=0;i3;
b[j][num[j]++]=a[i][1-c];
}}int main()
cout
<
蒜頭君的新遊戲 計蒜客
目錄 題目 題解 工作空閒之餘,蒜頭君經常帶著同事們做遊戲,最近蒜頭君發明了乙個好玩的新遊戲 n 位同事圍成乙個圈,同事 a 手裡拿著乙個兔妮妮的娃娃。蒜頭君喊遊戲開始,每位手裡拿著娃娃的同事可以選擇將娃娃傳給左邊或者右邊的同學,當蒜頭君喊遊戲結束時,停止傳娃娃。此時手裡拿著娃娃的同事即是敗者。玩了...
計蒜客習題 蒜頭君的新遊戲
工作空閒之餘,蒜頭君經常帶著同事們做遊戲,最近蒜頭君發明了乙個好玩的新遊戲 n 位同事圍成乙個圈,同事 a 手裡拿著乙個兔妮妮的娃娃。蒜頭君喊遊戲開始,每位手裡拿著娃娃的同事可以選擇將娃娃傳給左邊或者右邊的同學,當蒜頭君喊遊戲結束時,停止傳娃娃。此時手裡拿著娃娃的同事即是敗者。玩了幾輪之後,蒜頭君想...
計蒜客 乘法遊戲
乘法遊戲是在一行牌上進行的。每一張牌包括了乙個正整數。在每乙個移動中,玩家拿出一張牌,得分是用它的數字乘以它左邊和右邊的數,所以不允許拿第1張和最後1張牌。最後一次移動後,這裡只剩下兩張牌。你的目標是使得分的和最小。例如,如果數是10 1 50 20 5,依次拿1 20 50,總分是10 1 50 ...