题意
阿里九游开放平台近日上架了一款新的益智类游戏——成三棋。成三棋是我国非常古老的一个双人棋类游戏,成三棋的棋盘上有很多条线段,只能在线段交叉点上放入棋子。如果一条线段上的三个交叉点都被同一玩家的棋子占据的话,则称这条线段被该玩家 成三。现在,小红和小明两人在游戏平台上下棋,其中小红的棋子是黑色的。请你帮小红计算他成三的线段数。
思路
存下黑棋的横纵坐标,枚举线段进行判定
代码
#include <cstdio>
int x[9],y[9];
int main()
{
int n,m,cnt,ans,xx,yy;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
scanf("%d%d",&x[i],&y[i]);
ans=0;
cnt=0;
for(int i=0;i<n;i++)
if(x[i]==-3)
cnt++;
if(cnt==3)
ans++;
cnt=0;
for(int i=0;i<n;i++)
if(x[i]==-2)
cnt++;
if(cnt==3)
ans++;
cnt=0;
for(int i=0;i<n;i++)
if(x[i]==-1)
cnt++;
if(cnt==3)
ans++;
cnt=0;
for(int i=0;i<n;i++)
if(x[i]==3)
cnt++;
if(cnt==3)
ans++;
cnt=0;
for(int i=0;i<n;i++)
if(x[i]==2)
cnt++;
if(cnt==3)
ans++;
cnt=0;
for(int i=0;i<n;i++)
if(x[i]==1)
cnt++;
if(cnt==3)
ans++;
cnt=0;
for(int i=0;i<n;i++)
if(y[i]==-3)
cnt++;
if(cnt==3)
ans++;
cnt=0;
for(int i=0;i<n;i++)
if(y[i]==-2)
cnt++;
if(cnt==3)
ans++;
cnt=0;
for(int i=0;i<n;i++)
if(y[i]==-1)
cnt++;
if(cnt==3)
ans++;
cnt=0;
for(int i=0;i<n;i++)
if(y[i]==3)
cnt++;
if(cnt==3)
ans++;
cnt=0;
for(int i=0;i<n;i++)
if(y[i]==2)
cnt++;
if(cnt==3)
ans++;
cnt=0;
for(int i=0;i<n;i++)
if(y[i]==1)
cnt++;
if(cnt==3)
ans++;
cnt=0;
for(int i=0;i<n;i++)
if(x[i]==0&&y[i]<0)
cnt++;
if(cnt==3)
ans++;
cnt=0;
for(int i=0;i<n;i++)
if(x[i]==0&&y[i]>0)
cnt++;
if(cnt==3)
ans++;
cnt=0;
for(int i=0;i<n;i++)
if(y[i]==0&&x[i]>0)
cnt++;
if(cnt==3)
ans++;
cnt=0;
for(int i=0;i<n;i++)
if(y[i]==0&&x[i]<0)
cnt++;
if(cnt==3)
ans++;
for(int i=0;i<m;i++)
scanf("%d%d",&xx,&yy);
printf("%d\n",ans);
return 0;
}