题目:
- 34.5%
- 1000ms
- 131072K
阿里九游开放平台近日上架了一款新的益智类游戏——成三棋。成三棋是我国非常古老的一个双人棋类游戏,其棋盘如下图所示:
成三棋的棋盘上有很多条线段,只能在线段交叉点上放入棋子。我们可以用坐标系来描述棋盘:
如果一条线段上的三个交叉点都被同一玩家的棋子占据的话,则称这条线段被该玩家 成三。现在,小红和小明两人在游戏平台上下棋,其中小红的棋子是黑色的。请你帮小红计算他成三的线段数。
样例对应的棋盘如下:
输入格式
输入第一行两个整数 n,m(3≤n,m≤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
样例输出
2
思路:
题目给的小明的棋子没用,把小红的棋子的坐标都+3,这样更容易建立坐标系
然后根据成三棋的形状,模拟就行
晚上没做出来,思路太局限了,换一个坐标系的建法就可以变得容易了
代码:
#include<cstdio>
#include<cstring>
#include<cctype>
#include<string>
#include<set>
#include<iostream>
#include<stack>
#include<cmath>
#include<queue>
#include<vector>
#include<algorithm>
#define mem(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
#define mod 10000007
#define debug() puts("what the fuck!!!")
#define N 1111111
#define M 10000020
#define ll longlong
using namespace std;
int map[20][20];
int main()
{
int n, m;
while(~scanf("%d%d", &n, &m))
{
int x, y;
mem(map,0);
for (int i = 0; i < n; ++i)
{
scanf("%d%d", &x, &y);
map[x + 3][y + 3] = 1;
}
for (int i = 0; i < m; ++i)
{
scanf("%d%d", &x, &y);
}
int cnt = 0;
for (int i = 2; i <= 4; ++i) //2-4行 ,
{
for (int j = 0; j <= 6; ++j)
{
if (map[i][j] && map[i][j + 1] && map[i][j + 2])
{
cnt++;
}//竖着看
}
}
for (int i = 2; i <= 4; ++i) //2-4列
{
for (int j = 0; j <= 6; ++j)
{
if (map[j][i] && map[j + 1][i] && map[j + 2][i])
{
cnt++;
} //横着看
}
}
int k = 2, r = 1, c = 1; //竖着看
if (map[r][c] && map[r][c + k] && map[r][c + 2*k])
{
cnt++;
}
r = 5;
if (map[r][c] && map[r][c + k] && map[r][c + 2*k])
{
cnt++;
}
r = 0, k = 3, c = 0;
if (map[r][c] && map[r][c + k] && map[r][c + 2*k])
{
cnt++;
}
r = 6;
if (map[r][c] && map[r][c + k] && map[r][c + 2*k])
{
cnt++;
}
k = 2, c = 1, r = 1; //横着看
if (map[r][c] && map[r + k][c] && map[r + 2*k][c])
{
cnt++;
}
c = 5;
if (map[r][c] && map[r + k][c] && map[r + 2*k][c])
{
cnt++;
}
c = 0, k = 3, r = 0;
if (map[r][c] && map[r + k][c] && map[r + 2*k][c])
{
cnt++;
}
c = 6;
if (map[r][c] && map[r + k][c] && map[r + 2*k][c])
{
cnt++;
}
printf("%d\n", cnt);
}
return 0;
}