###### 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;
}

#### Fritz Chess Benchmark4.3.2完全汉化版

2013年02月05日 143KB 下载

#### HDU 4405 Aeroplane chess (概率dp)

2015-07-16 09:30:41

#### Mastering Chess and Shogi by Self_Play with a General Reinforcement

2017年12月07日 622KB 下载

#### [构造] Codeforces 736E #382 (Div. 1) E. Chess Championship

2017-04-07 06:46:20

#### UVa 750 - 8 Queens Chess Problem

2014-09-30 16:12:59

#### Codeforces Round #313 (Div. 2) E. Gerald and Giant Chess 定理Lucas求大组合数

2015-07-24 00:36:30

#### UVa 11538 - Chess Queen

2010-12-20 17:17:00

#### Fritz Chess Benchmark V4.3图吧专用

2013年10月12日 248KB 下载

#### Coder

2016-01-08 14:12:40

#### 2017"百度之星"程序设计大赛 - 初赛（B）Chess

2017-08-13 14:47:15

Chess