阿里的新游戏
阿里九游开放平台近日上架了一款新的益智类游戏——成三棋。成三棋是我国非常古老的一个双人棋类游戏,其棋盘如下图所示:
成三棋的棋盘上有很多条线段,只能在线段交叉点上放入棋子。我们可以用坐标系来描述棋盘:
如果一条线段上的三个交叉点都被同一玩家的棋子占据的话,则称这条线段被该玩家 成三。现在,小红和小明两人在游戏平台上下棋,其中小红的棋子是黑色的。请你帮小红计算他成三的线段数。
样例对应的棋盘如下:
输入格式
输入第一行两个整数 n,m(3 \le n, m \le 9),n 表示小红的棋子数,m 表示小明的棋子数。
接下来 n 行输入小红的棋子坐标。
接下来 m 行输入小明的棋子坐标。
输入保证坐标合法,并且棋子之间不重合。
输出格式
输出小红成三的线段数。
样例输入
6 3 -1 0 -2 0 -3 0 -1 -1 -1 1 1 0 0 2 0 3 2 2
样例输出
[cce_cpp] #include <stdio.h> #include <string.h> int main(){ int n, m, i, j, xt, yt, count, flag; char map[7][7] = { 0 }; scanf("%d%d", &n, &m); for (i = 0; i < n; i++){ scanf("%d%d", &xt, &yt); map[xt + 3][yt + 3] = 1; } for (i = 0; i < m; i++){ scanf("%d%d", &xt, &yt); xt += 3; yt += 3; // map[xt+3][yt+3] =2; if (xt + yt == 6){//右对角线 map[3][yt] = 0; map[yt][yt] = 0; map[xt][3] = 0; map[xt][xt] = 0; } else if (xt == yt){//左对角线 map[6 - xt][yt] = 0; map[3][yt] = 0; map[xt][6 - yt] = 0; map[xt][3] = 0; } else{ if (xt == 3){ if (yt < 3){ map[3][0] = 0; map[3][1] = 0; map[3][2] = 0; } else{ map[3][4] = 0; map[3][5] = 0; map[3][6] = 0; } } else{ if (xt < 3){ map[0][3] = 0; map[1][3] = 0; map[2][3] = 0; } else{ map[0][4] = 0; map[1][5] = 0; map[2][6] = 0; } } } } count = 0; for (i = 0; i < 6; i++) for (j = 0; j < 6; j++){ flag = 0; if (map[i][j] == 1){ if (i + j == 6){//右对角线 if (map[3][i] == 1 && map[j][j] == 1){ count++; flag = 1; } if (map[i][3] == 1 && map[i][i] == 1){ count++; flag = 1; } // if(flag==1){map[i][j]==0;continue;} } else if (i == j){//左对角线 if (map[6 - i][j] == 1 && map[3][j] == 1){ count++; flag = 1; } if (map[i][6 - j] == 1 && map[i][3] == 1){ count++; flag = 1; } // if(flag==1){map[i][j]==0;continue;} } else{ if (i == 3){ if (j < 3) if (map[3][0] == 1 && map[3][1] == 1 && map[3][2] == 1){ count++; flag = 1; } else if (map[3][4] == 1 && map[3][5] == 1 && map[3][6] == 1){ count++; flag = 1; } // if(flag==1){map[i][j]==0;continue;} } else{ if (i < 3) if (map[0][3] == 1 && map[1][3] == 1 && map[2][3] == 1){ count++; flag = 1; } else if (map[0][4] == 1 && map[1][5] == 1 && map[2][6] == 1){ count++; flag = 1; } // if(flag==1){map[i][j]==0;continue;} } } } map[i][j] = 0; } printf("%d\n", count); return 0; } [/cce_cpp]