# Chess

Two chess pieces, a rook and a knight, stand on a standard chessboard 8 × 8 in size. The positions in which they are situated are known. It is guaranteed that none of them beats the other one.

Your task is to find the number of ways to place another knight on the board so that none of the three pieces on the board beat another one. A new piece can only be placed on an empty square.

#include<iostream>
using namespace std;

bool board[10][10];

void killrook(int m,int n)
{
for(int i=0;i<8;i++)
{
board[m][i]=board[i][n]=true;
}
}
void killknight(int m,int n)
{
board[m][n]=true;
if(m-2>=0)
{
if(n-1>=0)
board[m-2][n-1]=true;
if(n+1<8)
board[m-2][n+1]=true;
}
if(m+2<8)
{
if(n-1>=0)
board[m+2][n-1]=true;
if(n+1<8)
board[m+2][n+1]=true;
}
if(n-2>=0)
{
if(m-1>=0)
board[m-1][n-2]=true;
if(m+1<8)
board[m+1][n-2]=true;
}
if(n+2<8)
{
if(m-1>=0)
board[m-1][n+2]=true;
if(m+1<8)
board[m+1][n+2]=true;
}
}
int main()
{
//freopen("in.txt","r",stdin);
char c;
int i;
while(~scanf("%c%d",&c,&i))
{
int ans=0;
memset(board,0,sizeof(board));
killrook(i-1,c-'a');
killknight(i-1,c-'a');
getchar();
scanf("%c%d",&c,&i);
getchar();
killknight(i-1,c-'a');
for(int j=0;j<8;j++)
for(int k=0;k<8;k++)
{
if(board[j][k]==false)
ans++;
}
printf("%d\n",ans);
}
return 0;
}

• 本文已收录于以下专栏：

举报原因： 您举报文章：Chess 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)