P1796 求解马走棋问题

178 阅读1分钟

image.png

image.png

思路 这题是脑筋急转弯,非常建议自己想

首先要找到一条路,能到达重点,然后将这条路“弯曲”成各种形状就行。 m、n是棋盘边长 x是先竖2再横1的数量,y是先横2再竖1的数量(其实这个顺序无所谓) image.png

通过以上方程很容易求得x、y

就一共x+y次走日

image.png

就是答案

排列组合知识点 image.png 代码片段

/*
		2x+y==m  
		x+2y==n  => x=(2m-n)/3  y=(2n-m)/3
		            注意判断x、y是否能取到整数 
	*/
	if((2*m-n-1)%3==0&&(2*n-m-1)%3==0&&(2*m-n-1)%3>0&&(2*n-m-1)%3>0){
		cout<<0<<endl;
		return 0;
	}