分析
这是一个分类讨论的题目,不需要太多的技巧,但是需要一定的耐心与数学功底。
后
后可以横、竖、斜着走。因此一行只能有一个皇后,一列也只能有一个皇后(要不然就会互吃),所以能放置 \(\min(n,m)\) 个皇后。
车
车和后差不多。也是一行只能有一个,一列也只能有一个,也只能放置 \(\min(n,m)\) 个。
马
马走日字,下过国际象棋的同学知道,马会走到其他颜色的格子上,且对角线上不会被攻击。所以我们可以都放在对角线上,也就是说可以放置 \(\frac {nm+1}{2}\)个。
王
王控制周围8个格子,也就是说上下左右以及四个角都被王所控制,那么我们可以每行隔一个格子放一个,每列也隔一个棋子放一个,这样互相就不会攻击了。答案是 \(((n+1) \div 2)((m+1) \div 2)\)。
奉上代码
现在好像还没有C++的代码,那我就来展示一下我的代码。
#include<bits/stdc++.h>
using namespace std;
int t,m,n;char op;
int main(){
cin>>t;
while(t--){
cin>>op>>m>>n;
switch(op){
case 'Q':
cout<<min(m,n);
break;
case 'r':
cout<<min(n,m);
break;
case 'k':
cout<<(n*m)/2;
break;
case 'K':
cout<<((n+1)/2)*((m+1)/2);
break;
}
cout<<endl;
}
return 0;
}