阿里九游开放平台近日上架了一款新的益智类游戏——成三棋。成三棋是我国非常古老的一个双人棋类游戏,其棋盘如下图所示:
成三棋的棋盘上有很多条线段,只能在线段交叉点上放入棋子。我们可以用坐标系来描述棋盘:
如果一条线段上的三个交叉点都被同一玩家的棋子占据的话,则称这条线段被该玩家 成三。现在,小红和小明两人在游戏平台上下棋,其中小红的棋子是黑色的。请你帮小红计算他成三的线段数。
样例对应的棋盘如下:
输入格式
输入第一行两个整数 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
分析:
枚举所有情况
代码:
#include<stdio.h>
struct node{
int x;
int y;
}a[10];
int main (){
int n,m;
scanf ("%d%d",&n,&m);
for(int i=0;i<n;i++){
scanf ("%d%d",&a[i].x,&a[i].y);
}
scanf ("%*d%*d");
int sum=0;
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
for (int k=0;k<n;k++){
if (a[i].x==a[j].x&&a[j].x==a[k].x&&a[i].x==a[k].x){
if(a[i].y==-3&&a[j].y==0&&a[k].y==3)
sum++;
else if(a[i].y==-2&&a[j].y==0&&a[k].y==2)
sum++;
else if(a[i].y==-1&&a[j].y==0&&a[k].y==1)
sum++;
else if(a[i].y==1&&a[j].y==2&&a[k].y==3)
sum++;
else if(a[i].y==-1&&a[j].y==-2&&a[k].y==-3)
sum++;
}
else if (a[i].y==a[j].y&&a[j].y==a[k].y&&a[i].y==a[k].y){
if(a[i].x==-3&&a[j].x==0&&a[k].x==3)
sum++;
else if(a[i].x==-2&&a[j].x==0&&a[k].x==2)
sum++;
else if(a[i].x==-1&&a[j].x==0&&a[k].x==1)
sum++;
else if(a[i].x==1&&a[j].x==2&&a[k].x==3)
sum++;
else if(a[i].x==-1&&a[j].x==-2&&a[k].x==-3)
sum++;
}
}
}
}
printf ("%d\n",sum);
return 0;
}