• 欢迎光临~

UVA278 Chess

开发技术 开发技术 2022-01-27 144次浏览

分析

这是一个分类讨论的题目,不需要太多的技巧,但是需要一定的耐心与数学功底。

后可以横、竖、斜着走。因此一行只能有一个皇后,一列也只能有一个皇后(要不然就会互吃),所以能放置 (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;
}
程序员灯塔
转载请注明原文链接:UVA278 Chess
喜欢 (0)
违法和不良信息举报电话:022-22558618 举报邮箱:dljd@tidljd.com